Privates Netzwerk, Vertragsprüfung – iterieren Sie durch Adressen und wiederholen Sie Funktionsaufrufe

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 abigeschieht (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.

Ich bin mir nicht sicher, ob Ihr Beispiel aus dem tatsächlichen Code stammt, aber es sieht so aus, als hätte es einen kleinen Fehler. submitUnits verwendet =, um UnitsFrom festzulegen, aber TotalUnits wird mit erhöht +=.
@MatthewSchmidt danke - das war Absicht - ein Mapping und eine laufende Summe. Code wird tatsächlich aus dieser Frage recycelt .
Da war ein Tippfehler myContractInstancevs MyContractInstance- das hat den Fehler verursacht...

Antworten (1)

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 1000kö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?