1) Запросы
Если вы просто хотите получить информацию без изменения состояния, тогда да, вы можете запросить контракт бесплатно. Запросы означают, что вы можете вызвать любую функцию, помеченную как view или pure , и стоимость газа отсутствует. В этих случаях любой узел, который вы запрашиваете, может ответить на запрос немедленно, без необходимости запрашивать какой-либо другой узел.
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);
}
Я думаю, что имеет смысл, что это должно быть связано с расходами, потому что на запрос можно ответить с одного узла, но вызовы транзакций должны проверяться всеми узлами.