¿Quién está pagando por una transacción dentro de un contrato?

Supongamos que hago una transacción a una función de contrato con mi cuenta externa, entonces tengo que pagar gasolina por esta transacción.

Si la función dentro de los contratos hace ahora una transacción por su cuenta para escribir algo a otros contratos, ¿quién está pagando entonces por esto?

Estaba probando esto en mi truffle developentorno y parece que mi cuenta acaba de pagar la transacción del primer contrato, no la segunda transacción.

Tampoco envié Ether a los primeros contratos anteriores. Pero la segunda transacción también funcionó.

  • ¿Las transacciones de los contratos son gratuitas?
  • ¿O es solo un comportamiento especial en mi entorno de prueba para facilitar las cosas?

editar:

El contrato hace una transacción simple, algo como esto:

contract First {
    Second secondContract;
    uint test;

    function setSomething(uint _testValue) external {
        secondContract.set(_testValue); //also set a uint within contract 2
        test = _testValue;
    }
}

Si agrego la siguiente línea en mi prueba, el resultado es 0 Ether porque nunca envío Ether a este contrato.

console.log(`Contract balance: ${web3.fromWei(web3.eth.getBalance(firstContact.address))}`);

La prueba aún funciona y si leo el valor del segundo contrato también obtengo el valor correcto.

¿Quizás tienes algún código como ejemplo? Cuando activa una transacción desde un contrato, el propio contrato la paga. Las transacciones nunca son gratuitas.
Agregué un ejemplo arriba
¡El gas utilizado por el contrato se calcula en la inicial a Primera convocatoria en este caso!
Ok, solo para que quede claro: si llamo a este primer contrato, ¿pago también con mi cuenta la segunda transacción dentro del primer contrato?
Sí, eso es exactamente lo que sucede.
Gracias, eso es exactamente lo que quería saber. Tal vez una pregunta adicional. ¿Puedo comparar mis resultados en mi red de prueba con la red principal? Digamos que una transacción cuesta 0.001 Ether en mi red de prueba... ¿será lo mismo en la red principal?
...por exactamente el mismo contrato.
¡Sí, hay costos fijos de gas para ciertos códigos de operación!

Respuestas (1)

El gas consumido por su transacción es el gas total utilizado durante la ejecución de su llamada a Contract A. Si A realiza una llamada (o una llamada delegada) a otro contrato, el gas consumido por ese también se suma al gas consumido por su transacción.

Si observa el seguimiento de paridad para una de esas transacciones, puede ver los otros contratos invocados y cuánto gas usó la invocación. El costo final de la transacción incluye todo esto.