Re: Вопрос про транзации Etherium (чтение данных, измененных транзакцией)
От: vmpire Россия  
Дата: 14.11.18 08:46
Оценка: 6 (1)
Здравствуйте, Lonely Dog, Вы писали:


LD>Контракт задеплоен в geth через truffle. Еще есть клиент на node.js (использующий web3.js). Вызвал я из него setValue. Это ведь транзакция (т.к. изменяет состояние контракта) и выполняется асинхронно. Т.е. когда-нибудь будет замайнена. И я так понимаю, value будет обновлено после этого. Т.е. возможна ситуация, когда вызов getValue вернет старое значение? Если да, то как с этим бороться?

Никак с этим не надо бороться, именно так блокчейн и работает. Ждите в клиенте, пока транзакция не выполнится.

LD>У меня поведение странное. Если я деплою контракт в truffle develop, и в консоли вызываю setValue, потом getValue, я получаю правильное значение. Если же вызываю из JS, то получаю старое значение. Т.е. похоже на то, что я описал выше. Но ведь это бред...

Вы при этом коннектитесь к одной и той же ноде? truffle использует свою тестовую ноду, но может и к другой коннектится. Если JS коннектится к geth, а truffle к своей тестовой ноде, то такое поведение впаолне понятно.

LD>Ладно, ок. Пускай у нас будет другой контракт, скажем вот такой:

...
LD>Здесь то все еще веселее. Вызвал я init(1), транзакция ушла. Но пока она не замайнилась, я не смогу вызвать doIt (т.к. контракт хранит старое значение).
Здесь, похоже, то же самое. Транзакция с init ещё не прошла.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.