Ich habe einen Smart Contract kopiert und von meinem Konto bei Mist on Rinkeby Network bereitgestellt.
Alle Funktionen funktionieren wie erwartet, bis auf eine. Ich werde den Code hier posten:
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);
}
}
}
Ich führe diesen Vertrag von meinem Hauptkonto aus, das 2,97 Ether zur Verfügung hat.
Ich übergebe ein Array von Adressen als 1. Parameter, z. B. ['Address1', 'Address2'] und die Anzahl der zu löschenden Token.
Immer wenn ich einen Tropfen von 10000000 Tropfen durchführe, funktioniert es gut, aber wenn ich sogar 1 weitere Ziffer erhöhe, sagen wir 100000000, dann tritt der im Bild gezeigte Fehler auf.
Was könnte das Problem sein?
Ich denke, das Problem ist diese Zeile im Vertrag,
uint256 amt = amount * 10**8;
Das bedeutet, dass Ihre eingegebene Token-Anzahl mit 8 Dezimalstellen multipliziert wird.
Daher muss Ihre Eingabe in ganzen Token erfolgen. Wenn Sie 10000000.00000000 Token in Ihrem Konto haben, kann Ihre maximale Eingabe 10000000 betragen, geteilt durch die Anzahl der Adressen. (Da man übrigens keine Brüche eingeben kann, sind die 8 Nachkommastellen also völlig sinnlos...)
Pankaj Wadhwa
Pankaj Wadhwa
Benjaminion
decimals
Parameter alle konsistent sind. Wenn Sie es entfernen, können Sie esdecimals
auf Null setzen und alles wird viel klarer (Sie werden immer mit ganzen Token handeln, also keine Verwirrung).Pankaj Wadhwa
Benjaminion
decimals
ist der Parameter nur für das UI - er hat keine interne Bedeutung im Vertrag. Einige UIs handhaben es und andere nicht, was nur zur Verwirrung beiträgt. Besser ohne, sage ich. Aber Dezimalzahlen können in einigen Anwendungsfällen sinnvoll sein, also ist die Einrichtung da, wenn Sie es wollen.Benjaminion