Предположим, я выполняю транзакцию для функции контракта с моей внешней учетной записью, тогда я должен заплатить газ за эту транзакцию.
Если функция внутри контрактов сейчас сама совершает транзакцию, чтобы что-то записать в другие контракты, то кто тогда за это платит?
Я тестировал это в своей truffle develop
среде, и похоже, что моя учетная запись только что заплатила за транзакцию по первому контракту, а не по второй транзакции.
Я также не отправлял Эфир на первые контракты раньше. Но вторая транзакция тоже сработала.
редактировать:
Контракт делает простую транзакцию, примерно такую:
contract First {
Second secondContract;
uint test;
function setSomething(uint _testValue) external {
secondContract.set(_testValue); //also set a uint within contract 2
test = _testValue;
}
}
Если я добавлю следующую строку в свой тест, результат будет 0 Эфира, потому что я никогда не отправляю Эфир на этот контракт.
console.log(`Contract balance: ${web3.fromWei(web3.eth.getBalance(firstContact.address))}`);
Тест все еще работает, и если я прочитаю значение из второго контракта, я также верну правильное значение.
Газ, потребляемый вашей транзакцией, — это общий газ, использованный во время выполнения вашего вызова Contract A
. Если A делает вызов (или делегирует вызов) другому контракту, газ, потребляемый этим контрактом, также добавляется к газу, потребляемому вашей транзакцией.
Если вы посмотрите на трассировку четности для одной из таких транзакций, вы увидите различные другие вызванные контракты и сколько газа было использовано при вызове. Окончательная стоимость сделки включает все это.
Джаспер
пользователь23858
Джаспер
пользователь23858
Джаспер
пользователь23858
пользователь23858
Джаспер