Red privada, prueba de contrato: iterar a través de direcciones y repetir llamadas de función

Me gustaría probar un contrato usando ~100s de diferentes cuentas. Para empezar, me gustaría encapsular las interacciones del contrato con direcciones sucesivas en un bucle for. Por el bien del argumento, usando este contrato:

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

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

La forma en que me imagino haciendo esto es con el siguiente pseudocódigo (donde abiestá desde arriba):

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})
}

¿Es posible lograr bucles como el anterior usando la consola geth javascript? Si no, ¿podría usar las opciones de la línea de comandos de geth con un bucle implementado en la línea de comandos del sistema operativo?

Mirando los documentos parece que esto no es posible. ¿De qué otra manera podría lograrlo?

EDITAR:

Creo que casi lo he logrado (código modificado). Sin embargo, ahora recibo este error:

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

Posiblemente deba esperar a que se extraiga la transacción primero.

No estoy seguro de si su ejemplo está tomado del código real, pero parece que tiene un pequeño error. submitUnits se usa =para establecer UnitsFrom, pero TotalUnits se incrementa con +=.
@MatthewSchmidt gracias, eso fue intencional, un mapeo y un total acumulado. El código en realidad se recicla a partir de esta pregunta .
Hubo un error tipográfico myContractInstancevs MyContractInstance- eso es lo que causó el error...

Respuestas (1)

Parece que tienes una idea de esto de todos modos, pero probablemente haya una manera más fácil de probar con cientos de cuentas: testrpc .

Con testrpc -a 1000usted puede crear una cadena de bloques simulada con mil cuentas virtuales llenas de éter. También será mucho más rápido usarlo, ya que testrpc en realidad no mina, y no tendrá que perder el tiempo enviando ETH virtual. Para usar testrpc con la consola de geth, use geth attach rpc:http://localhost:8545.

En cuanto a la segunda pregunta, contract.at()regresa de inmediato: no hay minería involucrada, ya que se usa para contratos ya existentes. ¿Estás seguro de que lo que obtienes web3.eth.contract()es en realidad un objeto de contrato?