前期準備
0.系統:Windows10
1.本地hosts文件配置(爲了後面truffle download可以成功)
2.ganache安裝(爲了在truffle console中使用有ETHER的測試帳戶)
3.node環境配置
node
1-2教程請參考如下鏈接:以太坊truffle框架搭建基礎請點此處
3教程請自行百度,檢驗本地是否有node環境:在cmd中輸入node回車 若有則以下圖所示👇
webpack
truffle + ganache 合約部署
1.新建項目文件夾 並在cmd中cd進入 輸入 truffle unbox webpack
出現以下圖👇所示輸出表明成功
項目文件夾中自動生成下圖👇目錄,手動將編寫好的合約複製粘貼到contracts目錄 該目錄中有幾個自動產生的合約 能夠不對他們作任何處理
2.ganache開啓 : 打開另外一個cmd 輸入 ganache-cli
出現以下圖👇所示則表示ganache成功打開 能夠看到 listening on 後面的主機爲127.0.0.1
,端口爲8545
3.修改項目文件夾中的 truffle-config.js
文件 使其的host
和port
與ganache中 listening on 後面的主機號與端口號一致 以下圖所示👇
4.修改項目文件夾下app/src/index.js文件中 http://
後面的主機號與端口號 使其與ganache中 listening on 後面的主機號與端口號一致 以下圖所示👇
5.進入項目文件夾下的 migrations
目錄 這裏面有幾個剛剛contracts文件夾中自動生成的合約的migration.js
仿造它,爲咱們的合約編寫這些migrations.js
注意每一個migration文件前面有序號 這個序號表示migration文件的執行順序 咱們編寫的migration文件前面也依次添加上序號 以下圖 👇 所示
web
migration.js代碼解析以下👇json
//case1:獨立合約 不import其餘合約文件 也不繼承其餘合約 //tell truffle which contract we want to interact with const contractName = artifacts.require(「contractName」); //exports a function that accepts an object called deployer as a parameter. //This object acts as an interface between you (the developer) and Truffle's deployment engine module.exports = function(deployer) { //部署該合約 deployer.deploy(contractName); }
//case2:import其餘合約文件 或繼承其餘合約 //先寫被import、被繼承的合約 const importcontract1 = artifacts.require(「importcontract1」); const importcontract2 = artifacts.require(「importcontract2」); ...... //最後寫該合約 const contractName = artifacts.require(「contractName」); //exports a function that accepts an object called deployer as a parameter. //This object acts as an interface between you (the developer) and Truffle's deployment engine module.exports = function(deployer) { //先部署引入合約 deployer.deploy(importcontract1); //再將引入合約與該合約連接 deployer.link(importcontract1, contractName); //對全部引入、繼承合約重複部署、連接操做 deployer.deploy(importcontract2); deployer.link(importcontract2, contractName); ...... //最後部署該合約 deployer.deploy(contractName); }
6.回到剛剛輸入 truffle unbox webpack 的cmd,輸入 ruffle compile
編譯合約 以下圖所示 👇 表示編譯成功
app
此時項目文件夾中也生成了一個build目錄 裏面有一個contracts文件夾,每一個合約在裏面都有一個json文件,包含合約的contractName,abi,metadata,bytecode…等信息
框架
7.接着在剛剛 輸入 ruffle compile 的cmd中輸入 truffle migrate
以下圖所示則說明migrate成功👇socket
注意 輸入一次後若是回去對合約或者migrate.js進行修改 下次應該輸入 truffle migrate --reset
ide
至此合約部署完成 如想要在web3.js中監聽合約中的event:
1.從這裏的輸出中複製合約地址
2.從 build/contracts 目錄中對於的json文件裏複製合約的abi 填入web3.js文件中的特定地方
詳情請請接着往下看👇
函數
web3.js監聽合約event
1.如下是一個簡單的web3.js代碼 填入合約地址、abi、和要監聽的事件名測試
var Web3 = require("web3") var web3; if (typeof web3 !== 'undefined') { web3 = new Web3(web3.currentProvider); } else { web3 = new Web3(new Web3.providers.WebsocketProvider("ws://127.0.0.1:8545")); } var contractAbi = [];//copy and past contract's abi into [] var contractaAddress = "0x";//copy and past contract's address after 0x MyContract = new web3.eth.Contract(contractAbi, contractaAddress); //console.log(MyContract.events.orderlog); var myEvent = MyContract.events.EventName({ filter:{}, fromBlock: 0 }, function(error, event){}) .on('data', function(event){ console.log(event); // same results as the optional callback above }) .on('changed', function(event){ // remove event from local database }) .on('error', console.error);
2.而後新開一個cmd 進入存放該web3.js的目錄 輸入 node web3.js' name
便可開始合約時間監聽 以下圖所示👇
3.監聽到event時將在控制檯打印以下輸出 👇
truffle 合約調試
1.在剛剛compile、migrate的cmd中輸入 truffle console
進入控制檯 以下圖所示👇
2.這裏使用一個erc20合約進行調試演示說明 部分調試代碼以下所示 👇
//首先實例化部署合約合約 let instance1 = await SToken.deployed() //獲取測試用帳戶 let accounts = await web3.eth.getAccounts() //owner默認是accounts[0] 也是默認調用函數的帳戶 //先用owner帳戶給帳戶1轉一些token instance.ownerMint(accounts[1],100000) //查合約總供應和帳戶1的餘額 instance.totalSupply() instance.balanceOf(accounts[1]) //帳戶1調用轉帳函數將本身的token轉給帳戶2 instance.transfer(accounts[2],500,{from:accounts[1]})
如需調用erc20的approve、allowance等其餘函數,或者其餘合約的函數,按照以上代碼照葫蘆畫瓢便可
下面是部分紅功調試的截圖👇
【直接輸入合約名能獲得合約相關的信息喲 ~ 獲取合約相關信息如地址 輸入合約名.address便可】