Si vamos a considerar el siguiente ejemplo, ¿cómo se Consumer
tendrá dinero para pagar los 800 de gasolina necesarios para el funcionamiento InfoFeed.feed
? ¿Por qué mecanismo se Consumer.callFeed()
cobra a la persona que llama?
contract InfoFeed {
function info() payable returns (uint ret) { return 42; }
}
contract Consumer {
InfoFeed feed;
function setFeed(address addr) { feed = InfoFeed(addr); }
function callFeed() { feed.info.value(10).gas(800)(); }
}
El remitente de la transacción original paga toda la gasolina. El gas de cualquier transacción interna lo pagan ellos. En este caso, quien llamó a callFeed() (o quien llamó a otra cosa que llamó a callFeed()) pagaría esos 800 de gasolina.
Normalmente, el valor podría enviarse al contrato del Consumidor en la transacción que llama a callFeed() o en una transacción anterior al contrato.
Sin embargo, en este caso, el contrato del Consumidor no tiene ninguna función marcada como pagadera, por lo que compilado con una versión reciente de solc, no veo ninguna forma de pagarlo, excepto posiblemente los métodos extraños y engañosos como establecerlo como el beneficiario de el suicidio de otro contrato o establecer la dirección del contrato como coinbase y extraer un bloque.
Es probable que el ejemplo deba actualizarse para incluir una función de pago.
tjaden hess
callFeed
No se cobra a la persona que llama . ElCustomer
contrato paga el ETH de su propio saldo, que probablemente sea cero, por lo que la llamada fallará.