Copié un contrato inteligente y lo implementé desde mi cuenta en Mist en Rinkeby Network.
Todas las funciones funcionan como se esperaba, excepto una. Voy a publicar el código aquí:
event PerformingDrop(uint count);
function drop(address[] addresses, uint256 amount) public onlyOwner {
uint256 amt = amount * 10**8;
require(amt > 0);
require(amt <= SUPPLY_CAP);
PerformingDrop(addresses.length);
// Maximum drop is 1000 addresses
assert(addresses.length <= 1000);
assert(balances[owner] >= amt * addresses.length);
for (uint i = 0; i < addresses.length; i++) {
address recipient = addresses[i];
if(recipient != NULL_ADDRESS) {
balances[owner] -= amt;
balances[recipient] += amt;
Transfer(owner, recipient, amt);
}
}
}
Estoy ejecutando este contrato desde mi cuenta principal que tiene 2,97 ether disponibles.
Estoy pasando una matriz de direcciones como primer parámetro, por ejemplo, ['Dirección1', 'Dirección2'] y la cantidad de tokens para colocar.
Cada vez que realizo una caída de 10000000 funciona bien, pero si aumento incluso 1 dígito más, digamos 100000000, entonces ocurre el error que se muestra en la imagen.
¿Cual podría ser el problema?
Creo que el problema es esta línea en el contrato,
uint256 amt = amount * 10**8;
Esto significa que su número de fichas de entrada se está multiplicando para dar cuenta de los 8 lugares decimales.
Por lo tanto, su entrada debe ser en términos de tokens completos . Si tiene 10000000.00000000 tokens en su cuenta, su entrada máxima puede ser 10000000, dividida por la cantidad de direcciones. (Por cierto, dado que no puede ingresar fracciones, esto significa que los 8 lugares decimales son totalmente inútiles...)
Pankaj Wadhwa
Pankaj Wadhwa
benjaminion
decimals
parámetro sean todos consistentes. Si lo elimina, puede establecerlodecimals
en cero y todo será mucho más claro (siempre estará tratando con tokens completos, por lo que no hay confusión).Pankaj Wadhwa
benjaminion
decimals
parámetro es solo para la interfaz de usuario; no tiene un significado interno en el contrato. Algunas interfaces de usuario lo manejan y otras no, lo que aumenta la confusión. Mejor sin, digo. Pero los decimales pueden tener sentido en algunos casos de uso, por lo que la función está ahí si la desea.benjaminion