Ich möchte einen Vertrag mit ~100 verschiedenen Konten testen. Zunächst möchte ich Vertragsinteraktionen mit aufeinanderfolgenden Adressen in einer for-Schleife kapseln. Um der Argumentation willen verwenden Sie diesen Vertrag:
contract UnitCounter {
mapping (address => uint256) public UnitsFrom;
uint256 public TotalUnits;
function submitUnits(uint256 Units) {
UnitsFrom[msg.sender] = Units;
TotalUnits += Units;
}
}
Ich stelle mir vor, dass dies mit dem folgenden Pseudocode abi
geschieht (woher von oben):
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})
}
Ist es möglich, Schleifen wie oben mit der Geth-Javascript-Konsole zu erreichen? Wenn nicht, könnte ich die Geth-Befehlszeilenoptionen mit einer Schleife verwenden, die in der Befehlszeile des Betriebssystems implementiert ist?
Wenn man sich die Dokumente ansieht , scheint dies nicht möglich zu sein. Wie könnte ich es sonst erreichen?
BEARBEITEN:
Ich glaube, ich habe es fast geschafft (Code geändert). Allerdings bekomme ich jetzt diesen Fehler:
ReferenceError: 'MyContractInstance' is not defined
at <anonymous>:10:1
Möglicherweise muss ich warten, bis die Transaktion zuerst abgebaut wird.
Es sieht so aus, als hätten Sie das sowieso im Griff, aber es gibt wahrscheinlich einen einfacheren Weg, um mit Hunderten von Konten zu testen: testrpc .
Mit testrpc -a 1000
können Sie eine simulierte Blockchain mit tausend virtuellen Konten erstellen, die mit Ether gefüllt sind. Es wird auch viel schneller sein, es zu benutzen, da testrpc nicht wirklich schürft, und Sie müssen keine Zeit damit verbringen, virtuelle ETH herumzuschicken. Um testrpc mit der Geth-Konsole zu verwenden, verwenden Sie geth attach rpc:http://localhost:8545
.
Was die zweite Frage betrifft, contract.at()
kehrt sie sofort zurück – es gibt kein Mining, da sie für bereits bestehende Verträge verwendet wird. Sind Sie sicher, dass es sich bei dem, was Sie herausholen, web3.eth.contract()
tatsächlich um einen Vertragsgegenstand handelt?
Matthäus Schmidt
=
, um UnitsFrom festzulegen, aber TotalUnits wird mit erhöht+=
.Lee
Lee
myContractInstance
vsMyContractInstance
- das hat den Fehler verursacht...