Ich habe kürzlich Solidity für Visual Studio installiert und sie haben dieses Smart Contract-Beispiel dort:
contract Payout {
address Victor;
address Jim;
address Kieren;
mapping (address => uint) ownershipDistribution;
function Setup() {
Victor = 0xaabb;
Jim = 0xccdd;
Kieren = 0xeeff;
ownershipDistribution[Victor] = 35;
ownershipDistribution[Jim] = 35;
ownershipDistribution[Kieren] = 30;
}
function Dividend() {
uint bal= this.balance;
Victor.send(bal * ownershipDistribution[Victor] / 100);
Jim.send(bal * ownershipDistribution[Jim] / 100);
Kieren.send(bal * ownershipDistribution[Kieren] / 100);
}
}
Grundsätzlich soll es die empfangenen Ether an 3 Adressen senden.
Aber ich glaube, der Code, so wie er ist, wird nicht funktionieren, da die letzte Transaktion nicht genug Gas haben wird, oder? Nur die ersten 2 würden ausgeführt.
Stellen Sie sich vor, der Vertrag enthält 10 ETH, 3,5 Eth + Gebühren / Gas werden an Adresse A gesendet, 3,5 Eth + Gebühren / Gas werden an Adresse B gesendet, jetzt haben wir nicht die restlichen benötigten 3 Eth für die dritte Adresse ...
Wie kann der Smart Contract also im Voraus wissen, welche Gase/Gebühren für die Transaktionen benötigt werden?
Grundsätzlich kennen Bergleute und Verträge die für eine Transaktion erforderlichen Gase/Gebühren nicht im Voraus: Sie müssen den Code in der Transaktion ausführen, um dies herauszufinden. Aus diesem Grund ist der gas
in einer Transaktion angegebene Betrag der maximale Betrag, den die Transaktion zu verbrauchen bereit ist.
Um die beabsichtigte Frage zu beantworten, werden Gebühren aus dem Saldo des Absenderkontos (dem Konto, das anruft Dividend
) gezahlt, das sich von dem Saldo des Payout
Vertrags unterscheidet, der zwischen Victor et al.
Stellen Sie sich Benzin vor, als wäre es Benzin in Ihrem Auto. Sie müssen nicht genau wissen, wie viel Gas Sie verbrauchen werden; Sie kaufen einfach mehr, als Sie denken, dass Sie brauchen werden, und wenn es ausgeht, hält das Auto einfach an.
In diesem Fall sendet der Absender eine bestimmte Menge Gas mit der Transaktion. Während der Code ausgeführt wird, verfolgt der Miner, wie viel Gas bisher verbraucht wurde. Wenn der Ausführung das Gas ausgeht, stoppt die Ausführung einfach und die gesamte Transaktion wird rückgängig gemacht, da sie nie stattgefunden hat. Der Bergmann darf das Gas jedoch behalten.
Tjaden Hess
Ausruhen
eth
Ausruhen
Nick Johnson
Ausruhen