Dapp-Development

任何“unix 哲學”工具來編寫/測試/部署乙太坊合約?

  • November 30, 2016

我已經嘗試過 Truffle 好幾次了,我真的很欣賞他們的工作,但對我來說,我覺得這太自以為是了。它具有建構整個應用程序的結構,包括 HTML、CSS、遷移。對我來說,我的客戶是獨立的項目,我不需要遷移。我寧願把這些問題分開,並有一個只做乙太坊相關開發的最小工具:

  1. 編寫乙太坊合約;
  2. 通過部署到本地測試網並從單獨的 JS 文件呼叫其方法來測試它;
  3. 完成後將其部署到測試網/主網。

我很迷茫,試圖從整個 Truffle 工作流程中提取最少的使用量。有沒有任何工具可以做到這一點,以 Unix 哲學的方式,做到這一點,只有那個,而且做得很好?

如果你說 Python,你可能會覺得 Populus 更舒服。它具有遷移功能,但不會強迫您使用它們。

我發現編譯/部署合約的最簡單方法是使用腳本中的web3node.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 。

引用自:https://ethereum.stackexchange.com/questions/10399