Go-Ethereum

私有網路,合約測試 - 遍歷地址並重複函式呼叫

  • March 23, 2018

我想使用大約 100 個不同的帳戶來測試契約。首先,我想將合約互動與連續地址封裝在一個 for 循環中。為了論證的緣故,使用這個契約:

contract UnitCounter {
   mapping (address => uint256) public UnitsFrom;
   uint256 public TotalUnits;

   function submitUnits(uint256 Units) {
       UnitsFrom[msg.sender] = Units;
       TotalUnits += Units;
   }
}

我想像他們這樣做的方式是使用以下虛擬碼(abi來自上面的位置):

var MyContract = web3.eth.contract(abi)
var myContractInstance = MyContract.at('0xE522E4A145f345925c80C5Cf4b67a5fa00304875')
var randnumberlist = [4,5,1,3,8,7,2,8,9,9,2]
for (var x = 0; x < 10; x++){
   personal.newAccount("pword")
   rand=randnumberlist[x]
   personal.unlockAccount(eth.coinbase,"coinbasepword",300) 
   eth.sendTransaction({from: eth.coinbase, to: eth.accounts[personal.listAccounts.length-1], gasPrice: "1000"})
   personal.unlockAccount(eth.accounts[personal.listAccounts.length-2],"pword",300)
   var randnumberlist = [4,5,1,3,8,7,2,8,9,9,2]
   myContractInstance.submitUnits(rand, {from: eth.accounts[personal.listAccounts.length-1], gas:3000000})
}

是否可以使用 geth javascript 控制台實現上述循環?如果沒有,我可以使用 geth 命令行選項和在 OS 命令行上實現的循環嗎?

查看文件似乎這是不可能的。我還能如何實現它?

編輯:

我想我幾乎成功了(修改了程式碼)。但是我現在收到此錯誤:

ReferenceError: 'MyContractInstance' is not defined
   at <anonymous>:10:1

可能我需要先等待交易被探勘。

無論如何,您似乎已經掌握了這一點,但是可能有一種更簡單的方法可以使用數百個帳戶進行測試:testrpc

你可以創建一個模擬區塊鏈,testrpc -a 1000其中包含一千個充滿乙太的虛擬賬戶。使用它也會快得多,因為 testrpc 實際上並不是我的,而且你不必花任何時間愚弄發送虛擬 ETH。要將 testrpc 與 geth 的控制台一起使用,請使用geth attach rpc:http://localhost:8545.

至於第二個問題,contract.at()立即返回——不涉及挖礦,因為它用於已經存在的合約。你確定你得到的web3.eth.contract()實際上是一個契約對象嗎?

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