如何使用Truffle部署智能合約
本文轉載自微信公眾號「區塊鏈研究實驗室」,作者鏈三豐。轉載本文請聯系區塊鏈研究實驗室公眾號。
Truffle是一個開發環境(提供用于編譯,部署,測試和構建的命令行工具),框架(提供各種程序包以使其易于編寫測試,部署代碼,構建客戶端等)和資產管道(發布軟件包并使用其他人發布的軟件包來構建基于以太坊的DApp。
使用Truffle,您可以獲得:
- 內置的智能合約編譯,鏈接,部署和二進制管理。
- 與Mocha和Chai進行自動化合同測試。
- 可配置的構建管道,支持自定義構建過程。
- 可編寫腳本的部署和遷移框架。
- 網絡管理,用于部署到許多公共和專用網絡。
- 用于直接合同通信的交互式控制臺。
- 在開發過程中立即重建資產。
- 外部腳本運行程序,在Truffle環境中執行腳本。
要使用大多數Truffle命令,您需要在現有的Truffle項目上運行它們。因此,第一步是創建一個Truffle項目,讓我們從安裝Truffle開始:
- $ npm install -g truffle
確保已安裝:
- $ truffle
- Truffle v3.2.1 - a development framework for Ethereum
- Usage: truffle [options]
- Commands:
- init Initialize new Ethereum project with example contracts and tests
- ...
然后創建項目:
- $ mkdir storage_smart_contract_example
- $ cd storage_smart_contract_example
- $ truffle init
在這里,您可以運行Truffle編譯,Truffle遷移和Truffle測試來編譯您的合同,將這些合同部署到網絡中,并運行其關聯的單元測試。
Truffle與本地開發區塊鏈服務器捆綁在一起,當您調用上述命令時,該服務器會自動啟動。如果您想配置更高級的開發環境,我們建議您通過在命令行上運行npm install -g ganache-cli來單獨安裝區塊鏈服務器。
ganache-cli:Truffle的區塊鏈服務器的命令行版本。
ganache:服務器的GUI,顯示您的交易歷史記錄和鏈狀態。
Truffle項目的結構
您創建的Truffle文件夾如下所示:
1.合同
- ConvertLib.sol
- MetaCoin.sol
- Migrations.so
2.遷移
- 1_initial_migration.js
- 2_deploy_contracts.js
3.測試
- TestMetacoin.sol
- metacoin.js
4. truffle-config.js
5. truffle.js
現在進一步編寫代碼,您將看到Truffle為我們創建了文件結構。轉到合同文件夾并創建Storage.sol文件,然后在其中寫入智能合同的代碼。
- pragma solidity ^0.4.8;
- contract Storage {
- uint256 storedData;
- function set(uint256 data) {
- storedData = data;
- }
- function get() constant returns (uint256) {
- return storedData;
- }
- }
現在轉到migrations / 2_deploy_contracts.js并將其修改為如下所示:
- var Storage = artifacts.require("./Storage.sol");
- module.exports = function(deployer) {
- deployer.deploy(Storage);
- };
現在我們已經有了基本的設置,我們需要將其部署到區塊鏈上,讓我們使用testrpc可以很好地完成測試開發目的,在一個單獨的選項卡上,鍵入以下命令:
- $ npm install -g ethereumjs-testrpc
- $ testrpc
- EthereumJS TestRPC v3.0.3
- Available Accounts
- ==================
- …
然后返回運行Truffle項目的選項卡:
- $ truffle compile
- $ truffle migrate
這樣我們就完成了合同的部署,讓我們檢查一下我們是否能夠調用合同功能。
- $ truffle console
- truffle(development)>
- Storage.deployed().then(instance => instance.get.call()).then(result => storeData = result)
- { [String: '0'] s: 1, e: 0, c: [ 0 ] }
- truffle(development)> storeData.toString()
- '0'
現在讓我們看看是否可以將storeData設置為值99。
- truffle(development)>
- Storage.deployed().then(instance => instance.set.sendTransaction(99)).then(result => newStorageData = result) '0xc5e2f9c9da4cf9f563c8e59073d5b6ca9458f112a6dcfc14aaea7c16a99422d4'
- truffle(development)> Storage.deployed().then(instance => instance.get.call()).then(result => storeData = result)
- { [String: '99'] s: 1, e: 1, c: [ 99 ] }
- truffle(development)> storeData.toString() '99'
目前為止,我們已經成功的部署和測試了Truffle項目合同,如有任何疑問請在留言區進行留言。






























