DAPP燃燒挖礦系統開發功能分析詳情(框架)

Lyr96246466發表於2023-04-17

 智慧合約的基本原理是把傳統合同的條款編製成,開發+18I鏈上合約-259l開發系統3365一套計算機程式碼,在買賣各方簽署後自動執行。區塊鏈上的智慧合約是把前述計算機程式碼部署到公鏈上,使其在公鏈上自動執行。智慧合約的簽署和執行過程中的每一步都形成一個區塊,並根據分散式記賬原理被記錄於鏈上每個節點



 在Solidity中,一個合約由一組程式碼(合約的函式)和資料(合約的狀態)組成。合約位於以太坊區塊鏈上的一個特殊地址。*uint storedData*;這行程式碼宣告瞭一個狀態變數,變數名為storedData,型別為uint(256bits無符號整數)。你可以認為它就像資料庫裡面的一個儲存單元,跟管理資料庫一樣,可以透過呼叫函式查詢和修改它。在以太坊中,通常只有合約的擁有者才能這樣做。在這個例子中,函式set和get分別用於修改和查詢變數的值。


  跟很多其他語言一樣,訪問狀態變數時,不需要在前面增加this.這樣的字首。


  這個合約還無法做很多事情(受限於以太坊的基礎設施),僅僅是允許任何人儲存一個數字。而且世界上任何一個人都可以來存取這個數字,缺少一個(可靠的)方式來保護你釋出的數字。任何人都可以呼叫set方法設定一個不同的數字覆蓋你釋出的數字。但是你的數字將會留存在區塊鏈的歷史上。稍後我們會學習如何增加一個存取限制,使得只有你才能修改這個數字。


contract Coin {

//關鍵字“public”使變數能從合約外部訪問。

    address public minter;

    mapping (address => uint) public balances;


//事件讓輕客戶端能高效的對變化做出反應。

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


//這個建構函式的程式碼僅僅只在合約建立的時候被執行。

    function Coin() {

        minter = msg.sender;

    }

    function mint(address receiver, uint amount) {

        if (msg.sender != minter) return;

        balances[receiver] += amount;

    }

    function send(address receiver, uint amount) {

        if (balances[msg.sender] < amount) return;

        balances[msg.sender] -= amount;

        balances[receiver] += amount;

        Sent(msg.sender, receiver, amount);

    }

}

這個合約引入了一些新的概念,讓我們一個一個來看一下。

address public minter; 這行程式碼宣告瞭一個可公開訪問的狀態變數,型別為address。address型別的值大小為160 bits,不支援任何算術操作。適用於儲存合約的地址或其他人的公私鑰。public關鍵字會自動為其修飾的狀態變數生成訪問函式。沒有public關鍵字的變數將無法被其他合約訪問。另外只有本合約內的程式碼才能寫入。自動生成的函式如下:

function minter() returns (address) { return minter; }

當然我們自己增加一個這樣的訪問函式是行不通的。編譯器會報錯,指出這個函式與一個狀態變數重名。




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

相關文章