Dapp-Development
任何“unix 哲學”工具來編寫/測試/部署乙太坊合約?
我已經嘗試過 Truffle 好幾次了,我真的很欣賞他們的工作,但對我來說,我覺得這太自以為是了。它具有建構整個應用程序的結構,包括 HTML、CSS、遷移。對我來說,我的客戶是獨立的項目,我不需要遷移。我寧願把這些問題分開,並有一個只做乙太坊相關開發的最小工具:
- 編寫乙太坊合約;
- 通過部署到本地測試網並從單獨的 JS 文件呼叫其方法來測試它;
- 完成後將其部署到測試網/主網。
我很迷茫,試圖從整個 Truffle 工作流程中提取最少的使用量。有沒有任何工具可以做到這一點,以 Unix 哲學的方式,做到這一點,只有那個,而且做得很好?
如果你說 Python,你可能會覺得 Populus 更舒服。它具有遷移功能,但不會強迫您使用它們。
我發現編譯/部署合約的最簡單方法是使用腳本中的web3庫
node.js
。以下幫助函式部署了一個可靠的原始碼並返回部署的合約對象:var fs = require("fs"); var Web3 = require("web3"); var web3 = new Web3(new Web3.providers.HttpProvider("http://localhost:8545")); // Receives a solidity source code and the account, compiles/deploy // the contract and calls the callback with the contract object. function testDeploy(contractSrc, account, callback){ var contractCmp = web3.eth.compile.solidity(contractSrc); var contractCon = web3.eth.contract(contractCmp.info.abiDefinition); contractCon.new({ data: contractCmp.code, from: account, gas: 1000000}, function(err, contract){ if (!contract.address) return; callback(contract); }); };
然後你可以呼叫它的方法來測試它們。例子:
testDeploy(` pragma solidity ^0.4.0; contract HelloWorld { event Print(string out); function() { Print("Hello, World!"); } function test() constant returns (int) { return 7; } }`, web3.eth.accounts[0], function(contract){ contract.test({ value: 0, gas: 200000, from: web3.eth.accounts[0]}, function(err, result){ console.log(result); }); });
7
正如預期的那樣,這將輸出 bignum 。