Могу ли я получить от транзакции изменения состояния контракта с помощью API RPC

Если я разговариваю с geth с помощью JSON RPC API, я нашел интересующую меня транзакцию и вижу, что она вызывает контракт (данные в «входной» части объекта транзакции).

Могу ли я тогда выяснить, какие изменения в балансах произошли в результате этого вызова? Я ничего не вижу в объекте TransactionReceipt.

Ответы (1)

Поскольку вы спрашиваете об остатках и имеете транзакцию с использованием JSON-RPC, вы можете увидеть from, toи valueтранзакции. Вы можете сделать простое предположение , что fromбаланс уменьшился на value, а toбаланс увеличился на value.

Это простая догадка, потому что вы не можете знать, toотправил ли контракт valueна другие учетные записи (в том числе некоторые обратно на from), если вы не посмотрите больше - некоторые примеры: посмотрите на код контракта, чтобы увидеть, что он делает, запустите код через Виртуальная машина Ethereum или симулятор, или сравните различия между текущим и предыдущим блоком.

это не покажет вам стоимость газа, если одна из сторон является той, которая представила транзакцию. Кроме того, обычно угадывание по дельта-числам в распределенных системах сопряжено с риском. Следует всегда использовать абсолютные счетчики, когда это возможно. Повторяя исходный вопрос: можем ли мы увидеть баланс адреса при конкретной транзакции?
@ПолС. Согласен с вашими пунктами; ваш вопрос, безусловно, понятнее, и я не уверен, что вопрос имел в виду именно это. Может быть, это так, и я думаю, что нормально написать свой ответ, как вы понимаете вопрос.
Вы также можете просто зарегистрировать событие в своей транзакции и получить баланс любого адреса, который вы хотите (address.balance в твердости). Я полагаю, что эти журналы находятся в квитанции.
Спасибо за ответы, а что конкретно непонятно в моем вопросе? Я знаю, как получить изменения в балансе на основе полей «значение» / «использование газа» / «цена газа» из объектов Transaction и TransactionReceipt. Но могут быть и другие побочные эффекты; не только к учетным записям от или к из кода в самом контракте - мне интересно, выставляются ли они через JSON RPC. Я действительно не хочу начинать пытаться запустить свою собственную EVM для этого. Но, может быть, это действительно единственный путь?
Если у вас есть более одного адреса, вызывающего API вашего контракта на блок, вам может быть трудно расшифровать, какая транзакция взимала какой баланс...
Это не мой контракт — это может быть любой контракт, о котором я ничего не знаю. Я просто пытаюсь выяснить, какие изменения в балансах могли произойти в результате звонка. Мне кажется, что в данный момент это невозможно.