¿Cómo se "cargan" los contratos con eth?

Si vamos a considerar el siguiente ejemplo, ¿cómo se Consumertendrá 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)(); }
}
callFeedNo se cobra a la persona que llama . El Customercontrato paga el ETH de su propio saldo, que probablemente sea cero, por lo que la llamada fallará.

Respuestas (2)

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.

Creo que el OP está hablando de fondos enviados como valor, no como gas.

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.