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 abi
está 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.
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 1000
usted 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?
Mateo Schmidt
=
para establecer UnitsFrom, pero TotalUnits se incrementa con+=
.Sotavento
Sotavento
myContractInstance
vsMyContractInstance
- eso es lo que causó el error...