Запуск внешней команды после подтверждения транзакции

Мне было интересно, можно ли запустить внешнюю команду (системный вызов) при подтверждении транзакции, отправленной узлом?

Например, если узел A запускает pyethapp (в контексте частной цепочки блоков) как:

$ pyethapp -c eth.network_id=1337 -c node.privkey_hex=091bd6067cb4612df85d9c1ff85cc47f259ced4d4cd99816b14f35650f59c322 -b 'enode://288b97262895b1c7ec61cf314c2e2004407d0a5dc77566877aad1f2a36659c8b698f4b56fd06c4a0c0bf007b4cfb3e7122d907da3b005fa90e724441902eb19e@0.0.0.0:30303' -c eth.genesis_hash=283bd9430c5f3114872f93beefe99d6626980b3a4a18a44ddd27749cd89688f2 -m 50 run

а затем узел B подключается к нему через pyethapp :

$ pyethapp -c eth.network_id=1337 -b 'enode://288b97262895b1c7ec61cf314c2e2004407d0a5dc77566877aad1f2a36659c8b698f4b56fd06c4a0c0bf007b4cfb3e7122d907da3b005fa90e724441902eb19e@192.168.2.12:30303' -c eth.genesis_hash=283bd9430c5f3114872f93beefe99d6626980b3a4a18a44ddd27749cd89688f2 run

и отправляет транзакцию со учетной записи на своей стороне на одну на стороне А. Может ли он предпринять какие-либо действия (инициировать системный вызов) после подтверждения транзакции?

Ответы (1)

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

Есть два способа сделать это, я думаю.

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

Другой способ — написать сценарий web3 для прослушивания событий (описано здесь: https://github.com/ethereum/wiki/wiki/JSON-RPC#eth_newblockfilter ) и реагировать на интересующие вас изменения. script будет работать вне сети, поэтому вы можете делать все, что угодно, включая системные вызовы.

Невозможно сделать системный вызов из программы Solidity, если это то, о чем вы спрашиваете.

второй вариант, я думаю, интересен, и я добавлю, что он мог бы использовать реализацию python для web3