Если один умный контракт считывает данные из другого умного контракта, стоит ли это бензина? - PullRequest
0 голосов
/ 21 января 2020

Когда функция одного контракта считывает данные из функции второго контракта (т. Е. Состояние второго контракта не изменяется). Он потребляет газ?

1 Ответ

0 голосов
/ 21 января 2020

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);
   }

Я думаю, что имеет смысл, что это должно быть связано с расходами, потому что на запрос можно ответить с одного узла, но вызовы транзакций должны проверяться всеми узлами.

...