1. 程式人生 > >搭建編譯和測試智慧合約流程

搭建編譯和測試智慧合約流程

步驟
1. node.js開發環境     https://nodejs.org/zh-cn/下載安裝   
2. 開發環境,remix      http://remix.ethereum.org/       (暫時不用,可以先跳過)
安裝本地remix環境
remix:Windows、Mac OS X和Linux。
remix
git clone https://github.com/ethereum/browser-solidity
cd browser-solidity
npm install
npm start
NPM是隨同NodeJS一起安裝的包管理工具,能解決NodeJS程式碼部署上的很多問題,常見的使用場景有以下幾種:
允許使用者從NPM伺服器下載別人編寫的第三方包到本地使用。
允許使用者從NPM伺服器下載並安裝別人編寫的命令列程式到本地使用。
允許使用者將自己編寫的包或命令列程式上傳到NPM伺服器供別人使用。

3. 編寫智慧合約

在E:\work_document\blockchain\solidity\calc下建立Calc.sol檔案,編寫如下智慧合約

pragma solidity ^0.4.0;

contract Calc
{
    function add(uint a, uint b) returns(uint)
    {
        return a + b;
    }
}
4. 安裝Solidity編譯器
在命令列輸入  npm install –g solc
檢視版本:solcjs  --version

5. 編譯Solidity程式

重新開啟cmd命令列到Calc.sol目錄下執行  solcjs --abi  --bin Calc.sol
生成兩個檔案:
Calc_sol_Calc.abi:介面檔案
Calc_sol_Calc.bin:以太坊執行的二進位制檔案(EVM位元組碼)

6. testrpc安裝  testrpc是在本地使用記憶體模擬的一個以太坊環境

npm install -g ethereumjs-testrpc

ps:簡介truffle和testrpc

truffle是本地的用來編譯、部署智慧合約的工具。testrpc不同於geth,geth是真正的以太坊環境,testrpc是在本地使用記憶體模擬的一個以太坊環境,對於開發除錯來說,更為方便快捷,當合約在testrpc中測試通過後,再部署到geth中去。所以可以說truffle和testrpc就是兩大殺器。)


7. 啟動testrpc

重新開啟cmd命令列執行 testrpc

預設埠號:8545,
testrpc會自動生成10個用於測試的address和10個private key。

8. 安裝web3.js
【web3.js與合約互動】web3.js是以太坊提供的一個Javascript庫,它封裝了以太坊的JSON RPC API,提供了一系列與區塊鏈互動的Javascript物件和函式,包括檢視網路狀態,檢視本地賬戶、檢視交易和區塊、傳送交易、編譯/部署智慧合約、呼叫智慧合約等,其中最重要的就是與智慧合約互動的API。

npm install [email protected]


9. 初始化(web3.js)
var Web3 = require('web3');
var web3 = new Web3(new Web3.providers.HttpProvider('http://localhost:8545'));
eth = web3.eth


10. 裝載abi和bin檔案
 abi = JSON.parse(fs.readFileSync('E:\\work_document\\blockchain\\solidity\\calc\\Calc_sol_Calc.abi').toString())
code = fs.readFileSync('E:\\work_document\\blockchain\\solidity\\calc\\Calc_sol_Calc.bin').toString()


11. 釋出智慧合約
contract = eth.contract(abi)
deployed = contract.new({from:eth.accounts[0],data:code,gas:470000})
//eth.accounts[0]  釋出智慧合約的賬戶,使用的是testrpc提供的預設賬戶第一個。
//data 釋出的二進位制檔案
//gas  釋出智慧合約最大的成本上線,儘量大一些  釋出智慧合約必須要付出一定的費用



deployed.address   //智慧合約的地址
12. 通過web3.js呼叫智慧合約
contract1 = eth.contract(abi)
instance = contract1.at(deployed.address)

instance.add.call(1,2)  //  本地呼叫

如下圖可看到執行結果兩者之和。