Я создаю обертку для мониторинга транзакций счетов. Я могу отследить транзакцию, которая происходит между двумя учетными записями, тогда как если это происходит через смарт-контракт, я не могу ее отследить. В etherscan я вижу это во внутренней транзакции. Как отследить внутреннюю транзакцию в Javascript?
Parity предоставляет очень удобную RPC-команду eth_tracetransaction (и связанные с ней вызовы). Это единственный известный мне способ получить следы. «Внутренние транзакции» — это просто смарт-контракт, вызывающий другой смарт-контракт. Эти данные находятся в трассировках. Обратите внимание, что Geth предоставляет трассировки, но их не так просто использовать, как Parity.
Внутренние транзакции можно отследить с помощью trace
модуля, доступного в клиентах ethereum. Кроме этого, есть еще варианты:
PR в geth, в котором представлены трассировщики, позволяет любому вводить свои собственные настраиваемые трассировщики, написанные либо на , либоgo
на js
. Вы можете вызывать эти методы следующим образом, используя web3@0.20
var web3 = require('web3');
web3.web3.currentProvider.sendAsync({
method: "debug_traceTransaction",
params: ['0x3fac854179691e377fc1aa180b71a4033b6bb3bde2a7ef00bc8e78f849ad356e', {}],
jsonrpc: "2.0",
id: "2"
}, function (err, result) {
...
});
Двумя основными вариантами отслеживания внутренних транзакций в JS являются (а) запуск узла четности (который может быть очень дорогим и может занимать до нескольких недель для синхронизации) или (б) использование отслеживания активности адресов (например, внутренних транзакций) от Alchemy Notify. .
Я настоятельно рекомендую проверить Alchemy Notify — это бесплатно, и я запустил его менее чем за 5 минут. Вот ссылка на их документы: https://docs.alchemyapi.io/alchemy/guides/using-webhooks#address-activity .
Надеюсь, это поможет :)
В некоторых форках web3js реализованы модули трассировки для Parity, например, этот https://github.com/BitySA/web3.js/commits/develop :
function Trace(web3) {
this._requestManager = web3._requestManager;
var self = this;
methods().forEach(function(method) {
method.attachToObject(self);
method.setRequestManager(self._requestManager);
});
}
Однако он поддерживает только Parity вместо Geth. Более поздняя поддержка трассировки внутри Geth отличается от этого метода, что приводит к путанице и несовместимости.
Картикеян Тангавел
Томас Джей Раш