Go-Ethereum
私有網路,合約測試 - 遍歷地址並重複函式呼叫
我想使用大約 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()
實際上是一個契約對象嗎?