IPP SWAP質押挖礦系統開發機制丨DAPP技術框架

Lyr96246466發表於2023-05-12

一套完整的區塊鏈DAPP,除智慧合約這些可以查詢和改變區塊鏈+181公鏈2591合約開發3365微電-+狀態的程式碼外,還需要用

戶操作介面及連線使用者操作與智慧合約程式碼的介面。

首先,使用者透過Web介面或者收集App將運算元據傳送到一個傳統的業務伺服器,該業務伺服器時傳統網際網路中心化的伺服器,但是與傳統系統不同的是,該系統沒有像傳統網際網路設計那樣將資料放入中心化的資料庫儲存,而是透過一個Web3.0介面,將資料傳送到以太坊區塊鏈公鏈上。

該介面是一個JSON RPC協議,該協議由很多程式碼實現。目前最-流行的是執行在Web容器中的Web.js3模組。Solidity程式語言經

過編譯之後,除了交易需要的合約初始化程式碼之外,還有ABI介面等描述檔案,Web3.js透過這些描述檔案,可以構建與以太坊

智慧合約虛擬機器進行通訊的模組,透過JS程式碼將使用者的運算元據傳入以太坊公鏈上的合約地址,智慧合約虛擬機器會根據函式籤

名和載入的函式引數,在虛擬機器內執行編譯成EVM Code的智慧合約。


如果涉及區塊鏈資料的讀取,則虛擬機器會讀取區塊鏈上的區塊資料。如果虛擬機器的指令程式碼修改以太坊公鏈的狀態,那麼透過

呼叫相關的狀態機指令,並消耗一定的GAS之後,就可以將修改操作提交到以太坊區塊鏈公鏈網路中,這些操作往往以交易的

方式體現。

在虛擬機器執行任務結束後,其對區塊鏈狀態的修改會被礦工打包。當狀態修改被全網共識時,虛擬機器對公鏈網路的狀態修改也

相應成功。可以透過查詢相關的執行結果,將執行狀態返回給使用者互動系統,這樣終端使用者就可以透過互動系統檢視DAPP操作

的執行結果。

prama solidity >=0.6.4;


contract SimpleStorage { //使用關鍵字contract定義合約結構體

uint storedData; //定義一個成員變數


function set(uint x) public { //定義關於該變數的設定函式

storedData = x;

}


function get() public view returns (uint) { //定義關於該變數的讀取函式

return storedData;

}

}

  智慧合約是一種旨在以資訊化方式傳播、驗證或執行合同的計算機協議。智慧合約允許在沒有第三方的情況下進行可信交易,

這些交易可追蹤且不可逆轉。


  

  智慧合約可以呼叫其他智慧合約,這開啟了創造一個自主代理的能力,這些代理可以自己進行交易。


一個區塊鏈專案往往就是一個程式,而且是開源程式。免費的開源程式沒人幹,必然需要商業利益驅動。代幣數量往往是有限

的,需求增加,代幣則會增值。為了讓代幣增值,開發者就必須不斷完善及最佳化相關技術;而每個使用該區塊鏈網路服務的用

戶,則需要向以太坊礦工支付一定費用,以激勵其繼續參與整個網路的維護。


01 pragma solidity >=0.6.4;

02

03 contract Coin {

04    address public minter; //定義一個地址型別的變數

05    // 定義一個地址到餘額數量的對映

06    mapping (address => uint) public balances;

07    // 宣告一個記錄日誌的事件

08    event Sent(address from, address to, uint amount);

09    constructor() public{ // 合約的建構函式

10        minter = msg.sender;

11    }

12    //定義修改餘額資料結構的函式,修改方式是直接增加某個地址的餘額值    

13    function mint(address receiver, uint amount) public {

14        require(msg.sender==minter,"Inconsistent deployer.");

15        require(amount < 1e60,"Quantity out of bounds.");

16        balances[receiver] += amount;

17    }

18    //定義轉移餘額的函式

19    function send(address receiver, uint amount) public {

20        require(amount <= balances[msg.sender],"Insufficient balance.");

21        balances[msg.sender] -= amount;

22        balances[receiver] += amount;

23        emit Sent(msg.sender,receiver,amount);

24    }

25}


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/70012429/viewspace-2951619/,如需轉載,請註明出處,否則將追究法律責任。

相關文章