Bitcoin Forum
June 01, 2024, 07:52:45 AM *
News: Latest Bitcoin Core release: 27.0 [Torrent]
 
   Home   Help Search Login Register More  
Pages: [1]
  Print  
Author Topic: GAZ за функционал в эфире  (Read 288 times)
ShDenis (OP)
Full Member
***
Offline Offline

Activity: 313
Merit: 103



View Profile
October 01, 2017, 11:02:06 AM
 #1

Есть 2 смарт контракта (далее СК), в одном есть параметр, во втором значение этого параметра часто используется. Как лучше в плане стоимости выполнения:
 1) постоянно обращаться к первому контракту за чтением значения через функцию get в СК1
 2) завести копию параметра во втором СК и организовать синхронизацию.
 Если плата за чтение параметра не из своего контракта не взимается, то хотелось бы оставить пункт 1) чтобы не усложнять СК2 (таких параметров много). Если взимается - то 1) неприемлемо.
quantum
Member
**
Offline Offline

Activity: 108
Merit: 250


View Profile
October 01, 2017, 06:05:06 PM
 #2

Плата взимается. Вот пример двух контрактов https://gist.github.com/anonymous/32321c46134c8edc6e8f4bc0bd63f760
В первом чтение из своей переменной (373 gas), во втором из переменной первого контракта (2362 gas)

ShDenis (OP)
Full Member
***
Offline Offline

Activity: 313
Merit: 103



View Profile
October 02, 2017, 07:16:54 AM
 #3

Что-то я запутался. Так а чтение из блокчейна EVM не должно быть бесплатным? Если мы добавим constant вот сюда:
StorageContract -> function getVar() public returns (uint256 a)
и вот сюда:
ClientContract -> function getVar() public returns (uint256 a)

не получится избежать платы за обращение к контрату хранилища?
KostiaSA
Jr. Member
*
Offline Offline

Activity: 34
Merit: 3


View Profile
October 02, 2017, 10:23:08 AM
 #4

все операции с блокчейном делятся на 1 типа

1. просто читаем информацию (функции const), в этом случае мы нагружаем только свою ноду и ни за что не платим

2. мы проводим транзакцию, в это случае мы нагружаем все ноды в сети, включая майнеров и просто юзеров, и платим за все, в том числе и за функции const
ShDenis (OP)
Full Member
***
Offline Offline

Activity: 313
Merit: 103



View Profile
October 02, 2017, 11:07:38 AM
 #5

тогда должно быть так, что мы читаем из одного СК, этот СК читает из второго СК и мы ничего не платим.

Или чуть сложнее. Мы вызываем в СК1 функцию, которая порождает транзакцию (что-то меняет), но при этом читает предварительно настройку из СК2. Так вот, за бесплатное чтение настройки из СК2 мы будем платить или нет - транзакция же будет при вызове СК1. Т.е. будет ли нам такой вызов функции СК1 дороже, чем если бы мы не обращались за чтением параметра из СК1 в СК2, а читали бы такой же (синхронизированный ранее) параметр из СК1?
KostiaSA
Jr. Member
*
Offline Offline

Activity: 34
Merit: 3


View Profile
October 02, 2017, 11:49:39 AM
 #6

если функция "порождает транзакцию", то плата берется за ВСЕ вызовы по ВСЕМ цепочкам
ShDenis (OP)
Full Member
***
Offline Offline

Activity: 313
Merit: 103



View Profile
October 02, 2017, 03:45:55 PM
 #7

если функция "порождает транзакцию", то плата берется за ВСЕ вызовы по ВСЕМ цепочкам


Тогда, хорошо что спросил. Спасибо.
Pages: [1]
  Print  
 
Jump to:  

Powered by MySQL Powered by PHP Powered by SMF 1.1.19 | SMF © 2006-2009, Simple Machines Valid XHTML 1.0! Valid CSS!