搭建編譯和測試智慧合約流程
阿新 • • 發佈:2019-01-08
步驟
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伺服器供別人使用。
{
function add(uint a, uint b) returns(uint)
{
return a + b;
}
}
4. 安裝Solidity編譯器
在命令列輸入 npm install –g solc
檢視版本:solcjs --version
生成兩個檔案:
Calc_sol_Calc.abi:介面檔案
Calc_sol_Calc.bin:以太坊執行的二進位制檔案(EVM位元組碼)
6. testrpc安裝 testrpc是在本地使用記憶體模擬的一個以太坊環境
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)
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) // 本地呼叫
如下圖可看到執行結果兩者之和。