以太坊開發測試(3)原始案例分析 Migrations.sol

以太坊開發測試(3)MetaCoin 案例分析

爲了方便測試,安裝圖形化區塊鏈客戶端Ganache

如圖所示,啓動這個測試區塊鏈客戶端。

第一行內容包括:當前賬戶,區塊信息,交易信息,合約信息,事件,日誌。

第二行內容包括:當前區塊數,Gas 的價格,GAS限制,分叉,網絡ID,RPC地址,挖礦模式。

部署MetaCoin服務如下:

從圖中可以看出,所有的代碼執行完畢,共生成了5個區塊,並且第一個賬戶看起來少了0.01個以太幣,第一個賬戶有5筆交易發生(Tx count)。

5個區塊的信息如下所示:

可以發現一共其實有6個塊,但是顯示只有5個塊,第一個應該是系統的初始區塊。

共發生5筆交易,

其中有三個是交易是合約創建交易,兩個交易是合約調用交易。

首先我們來看一個概念:HardFork 硬分叉

硬分叉的本質原因是,共識算法發生了更新,一些落後的節點無法驗證已經升級的節點產生的新區塊,如果不及時處理,則新的幣不能有效認證,產生分叉幣。簡單來說,就是因爲POW的一些不良影響,需要不斷更新共識算法來維護挖礦的公平性,爲了不斷改進以太坊公鏈而進行的強制分叉,分叉後,之前使用舊的共識算法的鏈可以繼續存活,使用新的共識算法的鏈也可以健康的向前發展。

接着,我們繼續分析。

編譯智能合約,更新內容,部署智能合約,現實網絡信息,注意這個網絡ID 和 Gas 消耗上限是根據你的區塊鏈設定的。

與智能合約沒有任何關係。我們也可以更改網絡ID Gas 消耗上限。

第二部分內容:

initial_migration.js  似乎是這個JS執行的邏輯,爲遷移腳本,將智能合約遷移(部署)到區塊鏈網絡中。

這個文件中的內容如下所示:

const Migrations = artifacts.require("Migrations");

module.exports = function(deployer) {
  deployer.deploy(Migrations);
};

創建一個靜態變量 migrations. artifacts.require 是一個方法,指定系統需要操作哪一個智能合約。得到返回值爲這個請求結果。在下邊的操作中將用 Migrations 來操作相關合約。

module.exports 是語法導出函數,即需要deployer 內容。進一步,由deloyer.deploy(Migrations) 部署合約。

接着 我們看這個合約到底執行了什麼內容?

Migrations.sol 內容如下所示:

pragma solidity >=0.4.25 <0.7.0;          //聲明合約語言版本

contract Migrations {                     //合約 Migrations
  address public owner;                   //address 爲地址變量,合約擁有者地址,可全局訪問
  uint public last_completed_migration;   //無符號整形公開變量

  modifier restricted() {                 //函數修改器,限定函數執行條件
    if (msg.sender == owner) _;           //只允許所有者調用這個方法,執行內容,否則報錯
  }

  constructor() public {                  //構造方法,將調用者地址保存
    owner = msg.sender;
  }
                                          //一個賦值函數將一個無整形int傳遞賦值
  function setCompleted(uint completed) public restricted { 
    last_completed_migration = completed;
  }
}

這應該是第一個被部署的合約全部內容。

練習一下,我們增加一個輸出字符串的變量和函數,然後再次編譯運行。

function setstring(string memory test) public {
    name = test;
  }

  function printown() view public returns (string memory){
        return name;
  }

//memory 爲臨時變量 最終並不存儲到區塊鏈中

執行結果如圖所示,首先我們看到,這個合約由第一個賬戶部署,總共花費0.02個以太幣。

左邊顯示的是交易細節,交易哈希值,合約地址,區塊編號,區塊時間戳,部署賬號,剩餘以太幣,Gas消耗,Gas價格,發送以太幣數量,總共花費 = Gas消耗 * Gas 價格,這裏爲313709 * 20 = 0.00627418以太幣。這簡單而本質的反映出以太坊手續費的計算方式:執行步數 * 每步價格。

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章