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