Когда функция одного контракта считывает данные из функции второго контракта (то есть состояние второго контракта не изменяется). Он потребляет газ?
Если один смарт-контракт считывает данные из другого смарт-контракта, стоит ли это платить за газ?
Ответы (1)
1) Запросы
Если вы просто хотите получить информацию, не меняя состояние, тогда вы можете запросить контракт бесплатно. Запрос означает, что вы можете вызвать любую функцию, помеченную как просмотреть или чистый и нет платы за газ. В этих случаях любой узел, который вы запрашиваете, может немедленно ответить на запрос, не спрашивая какой-либо другой узел.
2) Сделки
Если вы хотите изменить состояние, существует стоимость газа, и вам необходимо отправить транзакцию и оплатить газ.
3) Запросы внутри транзакций
Я думал, ваш первоначальный вопрос был о том, стоит ли запрашивать внутри транзакции. Это потребляет дополнительный газ. Я пробовал этот эксперимент в Remix с Solidity 0.6.1 (большая часть кода опущена для ясности):
// Gas used = 24,656
function SetSomethingInAnotherContract_WithoutCall() public
{
anotherContract.SetSomething(4);
}
// Gas used = 28,124
function SetSomethingInAnotherContract_WithCall() public
{
uint temp = anotherContract.GetSomething(); // in a query this would be free
anotherContract.SetSomething(4);
}
Я думаю, что это имеет смысл, потому что на запрос можно ответить с одного узла, но транзакционные вызовы должны проверяться всеми узлами.