成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

truffle安裝以及使用示例

RiverLi / 3261人閱讀

摘要:安裝命令使用命令安裝完成后,直接輸入即可。函數(shù)名函數(shù)名用于修改狀態(tài)變量的函數(shù)的調(diào)用,可以簡寫為后面這種。訪問內(nèi)有使用教程。文件夾中沒有,取而代之的是,內(nèi)容是個簡單的,功能是修改一個狀態(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 protected]"

安裝NodeJs

先安裝NodeJs環(huán)境:如果沒有安裝g++及 libssl-dev,則先要安裝好,安裝方法如下:
$ sudo apt-get install g++
$ sudo apt-get install libssl-dev
接下來,就可以下載安裝nodeJS,安裝最新版或者 > 6.9:國內(nèi)下載比較慢,需要一定的時間
tar zxvf node-v9.8.0.tar.gz
進入解壓的目錄:
$ ./configure
$ make && make install安裝需要半小時
安裝好后,在控制臺下輸入:
$ node -v
顯示出版本信息則表示node安裝成功。如果安裝過程出現(xiàn)一些包權限的錯誤,就在命令前加上sudo

安裝python2.7

ubuntu自帶,需要確認的話輸入
$ 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)存模擬的一個以太坊環(huán)境,對于開發(fā)調(diào)試來說,更為方便快捷,當你的合約在ganache-cli中測試通過后,再可以部署到geth中去。所以用truffle+ganache-cli進行本地開發(fā)測試方便快捷,能提升開發(fā)者開發(fā)測試效率。
安裝命令:
$npm install -g ganache-cli
使用ganache-cli命令:
$ganache-cli
安裝完成后,直接輸入$ganache-cli即可。
會提示正在監(jiān)聽8545端口,這就表示ganache-cli安裝成功,同時也開啟了區(qū)塊鏈測試環(huán)境,在進行開發(fā)部署中此窗口便一直開啟著不能關閉。所以開發(fā)測試的過程中需要另開一個terminal運行ganache-cli。

truffle框架的使用

truffle init
新建一個test根目錄,在命令行中進入這個目錄,輸入truffle init(創(chuàng)建一個應用),因為truffle init命令現(xiàn)在不會生成上層web頁面實例。本文操作以truffle unbox metacoin為例,生成一個數(shù)字貨幣的應用。如圖所示:

如果報錯,則嘗試加上sudo
當此命令執(zhí)行完以后生成的框架文件目錄如下:(將來要修改文件夾時候修改整個文件夾權限的命令式sudo chmod -R 777 ./test 修改test文件夾和其子目錄權限為777)。

contracts存放智能合約,含ConvertLib.sol MetaCoin.sol Migrations.sol
migrations 存放部署智能合約的程序
test 測試智能合約的腳本
truffle-config.js
truffle.js 存放配置信息

注意:
在truffle.js里加入:

  networks: {
    development: {
    host: "localhost",
    port: 8545,
    network_id: "*" // Match any network id
   }
  }

將項目部署到本地端口8545上,8545也是ganache-cli監(jiān)聽的端口。

truffle主要命令 truffle compile編譯

編譯智能合約,會對當前項目進行編譯,編譯完成之后項目中會出現(xiàn)build文件夾,build中有contracts文件夾,里面的ConvertLib.sol MetaCoin.sol Migrations.sol都變成了json文件,包含了對應的contracts的信息。

部署truffle migrate

需要在本地運行一個ethereum的客戶端。如geth。但是成本非常高,出塊慢。我們使用ganache-cli(他是一個基于js的區(qū)塊鏈模擬器,原名為TestPRC),不需要等待挖礦,所有的區(qū)塊鏈操作在瞬間完成,主要用于部署前的測試。
開啟了區(qū)塊鏈測試環(huán)境:另開一個terminal運行ganache-cli,在進行開發(fā)部署中此窗口便一直開啟著不能關閉。輸入$ganache-cli啟動,顯示正在監(jiān)聽端口8454.

輸入truffle migrations,運行migration文件夾內(nèi)部的初始化部署和部署合約的js程序。部署到ganache-cli的network上。在terminal中會顯示當前智能合約部署的地址。

如果報錯no network specified.cannot determine current network說明truffle.js文件中沒有配置到本地網(wǎng)絡的8545端口。

同時運行ganache-cli的terminal中也會輸出相應的交易信息。圖略

truffle console

console是與智能合約交互的控制臺。呼出控制臺可以輸入js代碼來與ganache-cli網(wǎng)絡進行交互。

WEB3.js
運行truffle console的時候,truffle會引入一個js的庫,叫WEB3.js,它是一個js和區(qū)塊鏈交互的橋梁。如同RESTful API。WEB3也可以通過abi獲取能夠調(diào)用的函數(shù)接口。(ABI(Application Binary Interface): 應用程序二進制接口,是solidity規(guī)定的外界與合約進行交互的方式。abi告訴用戶智能合約上有哪些接口是供人們調(diào)用的。)

輸入web3.eth.accounts會輸出ganache-cli網(wǎng)絡上所有的賬戶。
輸入web3.+tab 會輸出所有支持的指令,如web3.currentProvider輸出當前HttpProvider的信息。
輸入web3.eth.+tab輸出指令集,可以查看當前區(qū)塊,gas價格,是否在mining,當前賬戶,賬戶余額等等。
MetaCoin.deployed可以獲取已經(jīng)在network上部署的contract的實例。
MetaCoin.deployed.then(contract => { metacoin = contract}) 這是個異步的調(diào)用,獲取實例之后將contract賦給metacoin變量,然后就可以用metacoin這個實例與contract進行交互。
輸入metacoin顯示contract信息。
輸入metacoin.+tab顯示相關的函數(shù)。
web3調(diào)用合約函數(shù)的方法有兩種:

函數(shù)名.call() 用于只讀的函數(shù),如constant函數(shù),用于修改狀態(tài)變量的函數(shù)的時候執(zhí)行會失敗。

函數(shù)名.send()/函數(shù)名() 用于修改狀態(tài)變量的函數(shù)的調(diào)用,可以簡寫為后面這種。

輸入metacoin.getBalance.call(‘地址1’).then((result)=>{console.log(result)}) 這也是一個異步的調(diào)用,用于根據(jù)給定的地址獲取metacoin實例的balance,獲得結(jié)果為10000符合預期。
輸入metacoin.sendCoin.call(‘地址2’).then((result) => {console.log(result)}) 返回true。說明轉(zhuǎn)賬成功。
輸入metacoin.getBalance.call(‘地址2’).then((result)=>{console.log(result)}) 查看地址2現(xiàn)在的balance,返回不是2,而是0,因為call()函數(shù)只是在本地的node上執(zhí)行一遍函數(shù),只是讀取了區(qū)塊鏈上的信息,并不寫入到ethereum中去,所以結(jié)果不是2。
那么如何進行實際的轉(zhuǎn)賬呢,輸入metacoin.sendCoin(‘地址2’).then((result) => {console.log(result)}) 與之前相比少了一個call,就可以實際轉(zhuǎn)賬。返回的信息是一個json格式的transaction對象。包含了整個transaction的信息。

前端開發(fā)

truffle也提供了前端整合的能力。這里舉一個新的例子。
truffle box是一個truffle自帶的腳手架,不光有后端的contracts還有前端的代碼。
如:下載集成了react前端框架的box。訪問truffleframework.com/boxes/react內(nèi)有使用教程。
新建一個新的空文件夾用來存放集成了前端的truffle項目
mkdir react
cd react
輸入truffle unbox react會自動下載拆包設置所需要的庫,開盒成功之后。
目錄下會多出文件夾config,node_modules,public,scripts,src

config內(nèi)是前端需要的一些配置文件。
node_modules是前端需要的一些依賴文件。
public中是一些圖片和靜態(tài)的文件。
scripts是前端運行需要的一些程序(build.js,start.js,test.js)。
src存放的是前端的源代碼,也是前端開發(fā)的時候主要寫代碼的地方。
package.json里是前端開發(fā),測試需要依賴的一些庫的配置信息。

contracts文件夾中沒有MetaCoin.json,取而代之的是SimpleStorage.sol,內(nèi)容是個簡單的contract,功能是修改一個狀態(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)運行在localhost:3000上,默認瀏覽器會自動跳轉(zhuǎn)到這個地址
如果沒有跳轉(zhuǎn),手動輸入。

前端框架運行的原理
css文件夾中有pure-min.css,這是雅虎的前端框架
fonts文件夾中存放的是字體相關的文件。
utils文件夾中有getWeb3.js,主要是一段用于獲取web3實例的程序。首先是查看web3是否在程序中被定義了,如果已經(jīng)定義了,說明當前瀏覽器中已經(jīng)安裝了metamask的插件,此時使用currentProvider來使用web3的實例,如果定義,則嘗試連接localhost:8545,這個端口就是ganache-cli本地ethereum運行的端口。
index.js是react運行的入口。通過react可以方便地構建一個前端頁面。
App.js是程序的主體,引入了SimpleStorageContract,這也就是之前編譯contract所得的abi文件。這就傳遞了合約的方法和它在區(qū)塊中的地址。

componentWillMount是這個app的生命周期回調(diào)函數(shù)。會獲取web3異步地獲取web3對象,然后初始化contract,如果出現(xiàn)異常則在控制臺報錯。
初始化contract的過程,先引入”truffle-contract”庫。

獲取contract實例,賦給一個引用,用這個引用調(diào)用set和get函數(shù)。
render函數(shù)負責渲染。

在App.js當中修改5為10,刷新瀏覽器前端頁面,也變成10。

測試truffle test

在智能合約當中測試是最重要的環(huán)節(jié),因為智能合約只要上線就無法修改,必須要確保其正確無誤。
此處要使用自動化測試。
truffle提供了用js和Solidity的2種測試方式

js

Mocha

Chai

Solidity

test文件夾下有2個文件,分別是js和solidity的測試,測試流程大同小異:
deploye,set,get,assert
區(qū)別:
js當中是異步執(zhí)行測試的,soli是同步的。js的優(yōu)勢是測試與前端測試相似,可以模擬前端測試,稱為整合測試,可以有更強大的語法支持。js的另一大優(yōu)勢可以比較簡單地實現(xiàn)異常捕捉。推薦js寫測試。

soli測試寫法簡潔,適用于單元測試,另一大優(yōu)勢是js只能測試public的函數(shù),soli可以測試內(nèi)部function,internal的,通過繼承被測試contract來獲得internal function的訪問權限。

輸入truffle test,會出現(xiàn)2個test的結(jié)果。

總結(jié)

安裝truffle
truffle init
truffle compile
truffle migrate
truffle console
truffle test
truffle unbox 會下載一個配置好的前端環(huán)境
truffle 前端知識

文章版權歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/24014.html

相關文章

  • 使用truffle-box部署合約到區(qū)塊鏈并運行

    摘要:使用部署合約到區(qū)塊鏈本文介紹如何使用結(jié)合框架部署智能合約是以太坊最流行的開發(fā)框架,能夠在本地編譯部署智能合約,使命是讓開發(fā)更容易。至此,合約部署以及運行完成。 使用truffle-box部署合約到區(qū)塊鏈 本文介紹如何使用truffle結(jié)合vue框架部署智能合約 Truffle是以太坊最流行的開發(fā)框架,能夠在本地編譯、部署智能合約,使命是讓開發(fā)更容易。這里嘗試搭建環(huán)境,運行第一個區(qū)塊鏈程...

    supernavy 評論0 收藏0
  • 以太坊智能合約開發(fā)第六篇:truffle開發(fā)框架

    摘要:原文發(fā)表于以太坊智能合約開發(fā)第六篇開發(fā)框架在前面幾篇教程中,我們實現(xiàn)了一個簡單的合約,并通過編譯器將合約代碼編譯后,部署在私有鏈上。 原文發(fā)表于:以太坊智能合約開發(fā)第六篇:truffle開發(fā)框架 在前面幾篇教程中,我們實現(xiàn)了一個簡單的 Hello 合約,并通過 solc 編譯器將合約代碼編譯后,部署在私有鏈Ganache上。本篇將介紹通過truffle框架來構建自動編譯、部署合約代碼...

    ityouknow 評論0 收藏0
  • Mac下基于testrpc和truffle的以太坊智能合約開發(fā)環(huán)境搭建

    摘要:原文地址石匠的是一個基于開發(fā)的一套智能合約開發(fā)框架,使用語言編寫合約。預期通過和搭建一個只能合約的開發(fā)測試環(huán)境,部署官方的測試合約進行驗證和后續(xù)的測試學習。 原文地址:石匠的blog truffle是一個基于Javascript開發(fā)的一套智能合約開發(fā)框架,使用Solidity語言編寫合約。truffle有一套自動的項目構建機制,集成了開發(fā),測試和部署的各個流程細節(jié),不用開發(fā)人員關注。t...

    MasonEast 評論0 收藏0
  • Truffle框架搭建

    摘要:系統(tǒng)環(huán)境使用版。最好不用虛擬機,會有各種奇怪的問題。配置源為阿里云或其他國內(nèi)的鏡像。安裝一開始使用包管理器安裝,但是出現(xiàn)很多版本相關問題,因此不建議使用這種方法。 1.Linux 系統(tǒng)環(huán)境 使用 Ubuntu 16.04 LTS 版。 最好不用虛擬機,會有各種奇怪的問題。 配置源 /etc/apt/sources.list 為阿里云或其他國內(nèi)的鏡像。 2.安裝 Node JS 一開...

    Amos 評論0 收藏0

發(fā)表評論

0條評論

RiverLi

|高級講師

TA的文章

閱讀更多
最新活動
閱讀需要支付1元查看
<