Instalé recientemente Solidity para Visual Studio y tienen esta muestra de Smart Contract allí:
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);
}
}
Básicamente se supone que debe enviar los éteres que recibe a 3 direcciones.
Pero creo que el código tal como está no funcionará, ya que la última transacción no tendrá suficiente gasolina, ¿verdad? Solo los 2 primeros se ejecutarían.
Imagine que hay 10 ETH en el contrato, se enviarán 3,5 Eth + tarifas / gas a la dirección A, 3,5 Eth + tarifas / gas se enviarán a la dirección B, ahora no tenemos los 3 Eth restantes necesarios para la tercera dirección...
Entonces, ¿cómo puede Smart Contract saber por adelantado el gas/las tarifas necesarias para las transacciones?
Básicamente, los mineros y los contratistas no conocen de antemano el gas/las tarifas necesarias para una transacción: tienen que ejecutar el código en la transacción para averiguarlo. Es por esto que lo gas
especificado en una transacción, es la cantidad máxima que la transacción está dispuesta a consumir.
Para responder a la pregunta planteada, las tarifas se pagan del saldo de la cuenta del remitente (la cuenta que llama Dividend
), que es diferente del saldo del Payout
contrato que se divide entre Víctor y otros.
Piense en la gasolina como si fuera gasolina en su automóvil. No necesita saber de antemano exactamente cuánto gas va a usar; simplemente compra más de lo que cree que necesitará, y si se le acaba, el automóvil simplemente se detiene.
En este caso, el remitente envía una cierta cantidad de gas con la transacción. A medida que se ejecuta el código, el minero realiza un seguimiento de la cantidad de gas que se ha utilizado hasta el momento. Si la ejecución se queda sin gas, la ejecución simplemente se detiene y toda la transacción se revierte como nunca sucedió. Sin embargo, el minero se queda con el gas.
tjaden hess
descansar
ética
descansar
nick johnson
descansar