摘要:安裝命令使用命令安裝完成后,直接輸入即可。函數(shù)名函數(shù)名用于修改狀態(tài)變量的函數(shù)的調(diào)用,可以簡(jiǎn)寫為后面這種。訪問(wèn)內(nèi)有使用教程。文件夾中沒有,取而代之的是,內(nèi)容是個(gè)簡(jiǎn)單的,功能是修改一個(gè)狀態(tài)變量的值為然后讀取它。
Truffle ubuntu下安裝truffle
truffle安裝的依賴環(huán)境有:Nodejs,git ,python2.7(ubuntu自帶)
安裝git
sudo apt-get install git安裝完成后命令行輸入git,出現(xiàn)一些git的命令表示安裝成功。
命令行輸入:
$ git config --global user.name "YourName"
$ git config --global user.email"email@example.com"
安裝NodeJs
先安裝NodeJs環(huán)境:如果沒有安裝g++及 libssl-dev,則先要安裝好,安裝方法如下:
$ sudo apt-get install g++
$ sudo apt-get install libssl-dev
接下來(lái),就可以下載安裝nodeJS,安裝最新版或者 > 6.9:國(guó)內(nèi)下載比較慢,需要一定的時(shí)間
tar zxvf node-v9.8.0.tar.gz
進(jìn)入解壓的目錄:
$ ./configure
$ make && make install安裝需要半小時(shí)
安裝好后,在控制臺(tái)下輸入:
$ node -v
顯示出版本信息則表示node安裝成功。如果安裝過(guò)程出現(xiàn)一些包權(quán)限的錯(cuò)誤,就在命令前加上sudo
安裝python2.7
ubuntu自帶,需要確認(rèn)的話輸入
$ python --version
安裝truffle
$npm install -g truffle
命令執(zhí)行完之后,輸入truffle顯示出truffle的命令界面表示安裝成功。
安裝ganache-cli
ganache-cli是以太坊區(qū)塊鏈的模擬環(huán)境,不同于geth,geth是真正的以太坊環(huán)境,ganache-cli是在本地使用內(nèi)存模擬的一個(gè)以太坊環(huán)境,對(duì)于開發(fā)調(diào)試來(lái)說(shuō),更為方便快捷,當(dāng)你的合約在ganache-cli中測(cè)試通過(guò)后,再可以部署到geth中去。所以用truffle+ganache-cli進(jìn)行本地開發(fā)測(cè)試方便快捷,能提升開發(fā)者開發(fā)測(cè)試效率。
安裝命令:
$npm install -g ganache-cli
使用ganache-cli命令:
$ganache-cli
安裝完成后,直接輸入$ganache-cli即可。
會(huì)提示正在監(jiān)聽8545端口,這就表示ganache-cli安裝成功,同時(shí)也開啟了區(qū)塊鏈測(cè)試環(huán)境,在進(jìn)行開發(fā)部署中此窗口便一直開啟著不能關(guān)閉。所以開發(fā)測(cè)試的過(guò)程中需要另開一個(gè)terminal運(yùn)行g(shù)anache-cli。
truffle init
新建一個(gè)test根目錄,在命令行中進(jìn)入這個(gè)目錄,輸入truffle init(創(chuàng)建一個(gè)應(yīng)用),因?yàn)?b>truffle init命令現(xiàn)在不會(huì)生成上層web頁(yè)面實(shí)例。本文操作以truffle unbox metacoin為例,生成一個(gè)數(shù)字貨幣的應(yīng)用。如圖所示:
如果報(bào)錯(cuò),則嘗試加上sudo
當(dāng)此命令執(zhí)行完以后生成的框架文件目錄如下:(將來(lái)要修改文件夾時(shí)候修改整個(gè)文件夾權(quán)限的命令式sudo chmod -R 777 ./test 修改test文件夾和其子目錄權(quán)限為777)。
contracts存放智能合約,含ConvertLib.sol MetaCoin.sol Migrations.sol
migrations 存放部署智能合約的程序
test 測(cè)試智能合約的腳本
truffle-config.js
truffle.js 存放配置信息
注意:
在truffle.js里加入:
networks: { development: { host: "localhost", port: 8545, network_id: "*" // Match any network id } }
將項(xiàng)目部署到本地端口8545上,8545也是ganache-cli監(jiān)聽的端口。
truffle主要命令 truffle compile編譯編譯智能合約,會(huì)對(duì)當(dāng)前項(xiàng)目進(jìn)行編譯,編譯完成之后項(xiàng)目中會(huì)出現(xiàn)build文件夾,build中有contracts文件夾,里面的ConvertLib.sol MetaCoin.sol Migrations.sol都變成了json文件,包含了對(duì)應(yīng)的contracts的信息。
需要在本地運(yùn)行一個(gè)ethereum的客戶端。如geth。但是成本非常高,出塊慢。我們使用ganache-cli(他是一個(gè)基于js的區(qū)塊鏈模擬器,原名為TestPRC),不需要等待挖礦,所有的區(qū)塊鏈操作在瞬間完成,主要用于部署前的測(cè)試。
開啟了區(qū)塊鏈測(cè)試環(huán)境:另開一個(gè)terminal運(yùn)行g(shù)anache-cli,在進(jìn)行開發(fā)部署中此窗口便一直開啟著不能關(guān)閉。輸入$ganache-cli啟動(dòng),顯示正在監(jiān)聽端口8454.
輸入truffle migrations,運(yùn)行migration文件夾內(nèi)部的初始化部署和部署合約的js程序。部署到ganache-cli的network上。在terminal中會(huì)顯示當(dāng)前智能合約部署的地址。
如果報(bào)錯(cuò)no network specified.cannot determine current network說(shuō)明truffle.js文件中沒有配置到本地網(wǎng)絡(luò)的8545端口。
同時(shí)運(yùn)行g(shù)anache-cli的terminal中也會(huì)輸出相應(yīng)的交易信息。圖略
truffle consoleconsole是與智能合約交互的控制臺(tái)。呼出控制臺(tái)可以輸入js代碼來(lái)與ganache-cli網(wǎng)絡(luò)進(jìn)行交互。
WEB3.js
運(yùn)行truffle console的時(shí)候,truffle會(huì)引入一個(gè)js的庫(kù),叫WEB3.js,它是一個(gè)js和區(qū)塊鏈交互的橋梁。如同RESTful API。WEB3也可以通過(guò)abi獲取能夠調(diào)用的函數(shù)接口。(ABI(Application Binary Interface): 應(yīng)用程序二進(jìn)制接口,是solidity規(guī)定的外界與合約進(jìn)行交互的方式。abi告訴用戶智能合約上有哪些接口是供人們調(diào)用的。)
輸入web3.eth.accounts會(huì)輸出ganache-cli網(wǎng)絡(luò)上所有的賬戶。
輸入web3.+tab 會(huì)輸出所有支持的指令,如web3.currentProvider輸出當(dāng)前HttpProvider的信息。
輸入web3.eth.+tab輸出指令集,可以查看當(dāng)前區(qū)塊,gas價(jià)格,是否在mining,當(dāng)前賬戶,賬戶余額等等。
MetaCoin.deployed可以獲取已經(jīng)在network上部署的contract的實(shí)例。
MetaCoin.deployed.then(contract => { metacoin = contract}) 這是個(gè)異步的調(diào)用,獲取實(shí)例之后將contract賦給metacoin變量,然后就可以用metacoin這個(gè)實(shí)例與contract進(jìn)行交互。
輸入metacoin顯示contract信息。
輸入metacoin.+tab顯示相關(guān)的函數(shù)。
web3調(diào)用合約函數(shù)的方法有兩種:
函數(shù)名.call() 用于只讀的函數(shù),如constant函數(shù),用于修改狀態(tài)變量的函數(shù)的時(shí)候執(zhí)行會(huì)失敗。
函數(shù)名.send()/函數(shù)名() 用于修改狀態(tài)變量的函數(shù)的調(diào)用,可以簡(jiǎn)寫為后面這種。
輸入metacoin.getBalance.call(‘地址1’).then((result)=>{console.log(result)}) 這也是一個(gè)異步的調(diào)用,用于根據(jù)給定的地址獲取metacoin實(shí)例的balance,獲得結(jié)果為10000符合預(yù)期。
輸入metacoin.sendCoin.call(‘地址2’).then((result) => {console.log(result)}) 返回true。說(shuō)明轉(zhuǎn)賬成功。
輸入metacoin.getBalance.call(‘地址2’).then((result)=>{console.log(result)}) 查看地址2現(xiàn)在的balance,返回不是2,而是0,因?yàn)閏all()函數(shù)只是在本地的node上執(zhí)行一遍函數(shù),只是讀取了區(qū)塊鏈上的信息,并不寫入到ethereum中去,所以結(jié)果不是2。
那么如何進(jìn)行實(shí)際的轉(zhuǎn)賬呢,輸入metacoin.sendCoin(‘地址2’).then((result) => {console.log(result)}) 與之前相比少了一個(gè)call,就可以實(shí)際轉(zhuǎn)賬。返回的信息是一個(gè)json格式的transaction對(duì)象。包含了整個(gè)transaction的信息。
truffle也提供了前端整合的能力。這里舉一個(gè)新的例子。
truffle box是一個(gè)truffle自帶的腳手架,不光有后端的contracts還有前端的代碼。
如:下載集成了react前端框架的box。訪問(wèn)truffleframework.com/boxes/react內(nèi)有使用教程。
新建一個(gè)新的空文件夾用來(lái)存放集成了前端的truffle項(xiàng)目
mkdir react
cd react
輸入truffle unbox react會(huì)自動(dòng)下載拆包設(shè)置所需要的庫(kù),開盒成功之后。
目錄下會(huì)多出文件夾config,node_modules,public,scripts,src
config內(nèi)是前端需要的一些配置文件。
node_modules是前端需要的一些依賴文件。
public中是一些圖片和靜態(tài)的文件。
scripts是前端運(yùn)行需要的一些程序(build.js,start.js,test.js)。
src存放的是前端的源代碼,也是前端開發(fā)的時(shí)候主要寫代碼的地方。
package.json里是前端開發(fā),測(cè)試需要依賴的一些庫(kù)的配置信息。
contracts文件夾中沒有MetaCoin.json,取而代之的是SimpleStorage.sol,內(nèi)容是個(gè)簡(jiǎn)單的contract,功能是修改一個(gè)狀態(tài)變量的值為x然后讀取它。
migration文件夾中還是一樣的文件,_deploy_contracts.js的功能是把SimpleStorage.sol部署到network上去。
注意!修改 test/src/utils/getWeb3.js 里24行port為8545
操作流程基本一樣:
truffle compile
打開新窗口輸入
ganache-cli
回原窗口輸入
truffle migration
npm run start
輸出 app已經(jīng)運(yùn)行在localhost:3000上,默認(rèn)瀏覽器會(huì)自動(dòng)跳轉(zhuǎn)到這個(gè)地址
如果沒有跳轉(zhuǎn),手動(dòng)輸入。
前端框架運(yùn)行的原理
css文件夾中有pure-min.css,這是雅虎的前端框架
fonts文件夾中存放的是字體相關(guān)的文件。
utils文件夾中有g(shù)etWeb3.js,主要是一段用于獲取web3實(shí)例的程序。首先是查看web3是否在程序中被定義了,如果已經(jīng)定義了,說(shuō)明當(dāng)前瀏覽器中已經(jīng)安裝了metamask的插件,此時(shí)使用currentProvider來(lái)使用web3的實(shí)例,如果定義,則嘗試連接localhost:8545,這個(gè)端口就是ganache-cli本地ethereum運(yùn)行的端口。
index.js是react運(yùn)行的入口。通過(guò)react可以方便地構(gòu)建一個(gè)前端頁(yè)面。
App.js是程序的主體,引入了SimpleStorageContract,這也就是之前編譯contract所得的abi文件。這就傳遞了合約的方法和它在區(qū)塊中的地址。
componentWillMount是這個(gè)app的生命周期回調(diào)函數(shù)。會(huì)獲取web3異步地獲取web3對(duì)象,然后初始化contract,如果出現(xiàn)異常則在控制臺(tái)報(bào)錯(cuò)。
初始化contract的過(guò)程,先引入”truffle-contract”庫(kù)。
獲取contract實(shí)例,賦給一個(gè)引用,用這個(gè)引用調(diào)用set和get函數(shù)。
render函數(shù)負(fù)責(zé)渲染。
在App.js當(dāng)中修改5為10,刷新瀏覽器前端頁(yè)面,也變成10。
測(cè)試truffle test在智能合約當(dāng)中測(cè)試是最重要的環(huán)節(jié),因?yàn)橹悄芎霞s只要上線就無(wú)法修改,必須要確保其正確無(wú)誤。
此處要使用自動(dòng)化測(cè)試。
truffle提供了用js和Solidity的2種測(cè)試方式
js
Mocha
Chai
Solidity
test文件夾下有2個(gè)文件,分別是js和solidity的測(cè)試,測(cè)試流程大同小異:
deploye,set,get,assert
區(qū)別:
js當(dāng)中是異步執(zhí)行測(cè)試的,soli是同步的。js的優(yōu)勢(shì)是測(cè)試與前端測(cè)試相似,可以模擬前端測(cè)試,稱為整合測(cè)試,可以有更強(qiáng)大的語(yǔ)法支持。js的另一大優(yōu)勢(shì)可以比較簡(jiǎn)單地實(shí)現(xiàn)異常捕捉。推薦js寫測(cè)試。
soli測(cè)試寫法簡(jiǎn)潔,適用于單元測(cè)試,另一大優(yōu)勢(shì)是js只能測(cè)試public的函數(shù),soli可以測(cè)試內(nèi)部function,internal的,通過(guò)繼承被測(cè)試contract來(lái)獲得internal function的訪問(wèn)權(quán)限。
輸入truffle test,會(huì)出現(xiàn)2個(gè)test的結(jié)果。
總結(jié)安裝truffle
truffle init
truffle compile
truffle migrate
truffle console
truffle test
truffle unbox 會(huì)下載一個(gè)配置好的前端環(huán)境
truffle 前端知識(shí)
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://m.specialneedsforspecialkids.com/yun/24014.html
摘要:使用部署合約到區(qū)塊鏈本文介紹如何使用結(jié)合框架部署智能合約是以太坊最流行的開發(fā)框架,能夠在本地編譯部署智能合約,使命是讓開發(fā)更容易。至此,合約部署以及運(yùn)行完成。 使用truffle-box部署合約到區(qū)塊鏈 本文介紹如何使用truffle結(jié)合vue框架部署智能合約 Truffle是以太坊最流行的開發(fā)框架,能夠在本地編譯、部署智能合約,使命是讓開發(fā)更容易。這里嘗試搭建環(huán)境,運(yùn)行第一個(gè)區(qū)塊鏈程...
摘要:原文發(fā)表于以太坊智能合約開發(fā)第六篇開發(fā)框架在前面幾篇教程中,我們實(shí)現(xiàn)了一個(gè)簡(jiǎn)單的合約,并通過(guò)編譯器將合約代碼編譯后,部署在私有鏈上。 原文發(fā)表于:以太坊智能合約開發(fā)第六篇:truffle開發(fā)框架 在前面幾篇教程中,我們實(shí)現(xiàn)了一個(gè)簡(jiǎn)單的 Hello 合約,并通過(guò) solc 編譯器將合約代碼編譯后,部署在私有鏈Ganache上。本篇將介紹通過(guò)truffle框架來(lái)構(gòu)建自動(dòng)編譯、部署合約代碼...
摘要:原文地址石匠的是一個(gè)基于開發(fā)的一套智能合約開發(fā)框架,使用語(yǔ)言編寫合約。預(yù)期通過(guò)和搭建一個(gè)只能合約的開發(fā)測(cè)試環(huán)境,部署官方的測(cè)試合約進(jìn)行驗(yàn)證和后續(xù)的測(cè)試學(xué)習(xí)。 原文地址:石匠的blog truffle是一個(gè)基于Javascript開發(fā)的一套智能合約開發(fā)框架,使用Solidity語(yǔ)言編寫合約。truffle有一套自動(dòng)的項(xiàng)目構(gòu)建機(jī)制,集成了開發(fā),測(cè)試和部署的各個(gè)流程細(xì)節(jié),不用開發(fā)人員關(guān)注。t...
摘要:系統(tǒng)環(huán)境使用版。最好不用虛擬機(jī),會(huì)有各種奇怪的問(wèn)題。配置源為阿里云或其他國(guó)內(nèi)的鏡像。安裝一開始使用包管理器安裝,但是出現(xiàn)很多版本相關(guān)問(wèn)題,因此不建議使用這種方法。 1.Linux 系統(tǒng)環(huán)境 使用 Ubuntu 16.04 LTS 版。 最好不用虛擬機(jī),會(huì)有各種奇怪的問(wèn)題。 配置源 /etc/apt/sources.list 為阿里云或其他國(guó)內(nèi)的鏡像。 2.安裝 Node JS 一開...
閱讀 3479·2021-11-25 09:43
閱讀 2630·2021-09-22 15:54
閱讀 607·2019-08-30 15:55
閱讀 984·2019-08-30 15:55
閱讀 2010·2019-08-30 15:55
閱讀 1754·2019-08-30 15:53
閱讀 3479·2019-08-30 15:52
閱讀 2049·2019-08-30 12:55