天天看點

truffle+ganache-cli建構簡單以太坊智能合約并編譯部署

    以前接觸過以太坊工具鍊來做區塊鍊練手項目,後來荒廢了,如今再次撿起來,算是回憶和加深。

    之前可能因為網絡的原因,在truffle各種初始化編譯合成智能合約都遇到了好多問題,如今再次嘗試,發現可以很快入門。

    下面來看看如何通過truffle與ganache-cli來建構以太坊合約。

    以太坊工具鍊就不多介紹了,這裡面水很深,内容很多,本文需要的主要的就是node環境,然後就是ganache服務,部署合約的時候需要這個服務。truffle是進行合約編譯部署的工具,可以初始化項目,編譯合約,合成合約,部署合約。

   下面來看看如何做一個簡單的智能合約。

    1、磨刀不誤砍柴工;

    假定我們已經安裝了node環境以及npm等工具。需要全局安裝truffle,ganache-cli

npm install truffle ganache-cli -g
           

     安裝好之後,我們可以看看版本資訊:

    truffle自帶solidity版本是0.5.16,web3版本是1.2.9

truffle+ganache-cli建構簡單以太坊智能合約并編譯部署

    ganache-cli是ethereum-testrpc的替代,是以不用再安裝testrpc了。

truffle+ganache-cli建構簡單以太坊智能合約并編譯部署

     我們可以現在就啟動ganache服務,它會監聽localhost下的8545端口

truffle+ganache-cli建構簡單以太坊智能合約并編譯部署

    2、牛刀小試

        建立檔案夾、初始化以太坊合約項目,編寫智能合約。

truffle+ganache-cli建構簡單以太坊智能合約并編譯部署

    contracts/HelloWorld.sol  合約檔案需要放在contracts目錄下

truffle+ganache-cli建構簡單以太坊智能合約并編譯部署

    合成合約檔案放在migrations目錄下 ,合成檔案名稱也有講究,就是以數字開頭,帶下劃線:

truffle+ganache-cli建構簡單以太坊智能合約并編譯部署

    3、齊活

    其實這裡就是需要準備兩個檔案,一個是合約檔案sol結尾,一個是合成合約檔案,就是js檔案

    HelloWorld.sol

pragma solidity ^0.5.0;

contract HelloWorld {
  string public name;
  constructor(string memory _name) public {
    name = _name;
  }

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

  function setName(string memory _name) public {
    name = _name;
  }
}
           

    2_deploy_contract.js

const HelloWorld = artifacts.require("./HelloWorld.sol");

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

    合約部署這裡,先挖一個坑,這裡會引出一個報錯,以及怎麼解決。 

    4、見證奇迹

    修改truffle配置檔案,在項目目錄下有一個檔案tuffle-config.js,這是truffle的配置檔案,需要配置一個網絡資訊,就是前面開啟的ganache服務資訊,需要配置host,port,network_id:

truffle+ganache-cli建構簡單以太坊智能合約并編譯部署

    将配置中development這塊的注釋打開,預設是注釋掉的。

    編譯合約,合成合約,部署合約

  •     truffle compile   這句指令直接在指令行下運作就可以,它是用來編譯合約的
  •     truffle console  這句指令是開啟truffle開發者模式,會進入指令行互動模式,合成合約需要在這個互動模式下進行
  •     truffle migrate  這句指令是合成合約的,我們需要在開發者模式下運作
truffle+ganache-cli建構簡單以太坊智能合約并編譯部署

    進入開發者模式:

truffle+ganache-cli建構簡單以太坊智能合約并編譯部署

    這一步因為前面在編寫合約的時候,寫了一個構造函數constuctor(string memory _name),而我們在部署合約的代碼裡面沒有加入 參數,是以會報錯:"HelloWorld" -- Invalid number of parameters for "undefined". Got 0 expected 1!

truffle+ganache-cli建構簡單以太坊智能合約并編譯部署

    解決辦法就是在部署合約代碼中加入參數:

truffle+ganache-cli建構簡單以太坊智能合約并編譯部署

    合成合約,不報錯,可以進行合約部署測試:

HelloWorld.deployed().then(instance=>contract=instance)
           
truffle+ganache-cli建構簡單以太坊智能合約并編譯部署

    合約調用:contract.getName()

truffle+ganache-cli建構簡單以太坊智能合約并編譯部署

    這裡,在truffle development開發者模式下,函數可以進行自動補全,我們輸入contract.get可以通過tab鍵來進行提示。 

繼續閱讀