Как отслеживать входящие транзакции смарт-контракта с помощью web3js?

У меня есть один смарт-контракт Ethereum, который вызывает функции другого. Как я могу отслеживать эти звонки с помощью web3js или другого инструмента, если это вообще возможно? Мне это нужно, потому что я хочу выполнить некоторый код JavaScript (или другого несолидного языка) после получения такого вызова, а затем вызвать другую функцию первого смарт-контракта, поэтому последовательность вызовов должна быть следующей:

  1. Смарт-контракт N1 вызывает функцию смарт-контракта N2.
  2. Код JavaScript (или другого несолидного языка) перехватывает этот вызов и выполняет некоторый код.
  3. Смарт-контракт N2 вызывает обратно N1, используя данные из предыдущего шага.

Может ли кто-нибудь помочь с этим?

Я думаю, вы можете использовать javascript в качестве моста. Вы используете javascript для вызова функции в контракте N1 для вызова N2, а затем прослушиваете вызов. Когда он получает подтверждение и выполняет код, javascript вызывает контракт N2 для вызова N1. Оба контракта должны иметь функцию для вызова другого контракта, иначе я думаю, что это невозможно.

Ответы (1)

То, что вы пытаетесь заархивировать, противоречит принципам проектирования Solidity и блокчейна. Ответ на вопрос Почему контракты не могут выполнять вызовы API? в значительной степени объяснит, почему.

Короче говоря: если бы вы открыли Solidity для вызова произвольного кода, отличного от Solidity, он стал бы недетерминированным, поскольку этот код, отличный от Solidity, не существовал бы вне блокчейна и мог быть изменен независимо.

Я это понимаю, но такое решение, как oraclize.it, существует и работает успешно. Мне нужно что-то вроде этого.
Оракул и то, о чем вы просите, не совсем одно и то же. По сути, то, что Oracle делает для отправки определенных данных из внешнего мира в блокчейн, в то время как выполнение вызова API было бы как раз наоборот. Заметили разницу? Возможно, вам придется переосмыслить то, чего вы пытаетесь достичь, или, по крайней мере, объяснить немного больше деталей.
Также, возможно, проверьте образцы кода на docs.oraclize.it/#ethereum-quick-start . Или вам следует задать другой вопрос, возможно, такой: как написать собственный оракул на блокчейне?