Как получить внутреннюю транзакцию в Javascript?

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

Ответы (4)

Parity предоставляет очень удобную RPC-команду eth_tracetransaction (и связанные с ней вызовы). Это единственный известный мне способ получить следы. «Внутренние транзакции» — это просто смарт-контракт, вызывающий другой смарт-контракт. Эти данные находятся в трассировках. Обратите внимание, что Geth предоставляет трассировки, но их не так просто использовать, как Parity.

Не могли бы вы дать мне ссылку на документацию? Я не могу найти это на странице паритета вики.

Внутренние транзакции можно отследить с помощью traceмодуля, доступного в клиентах ethereum. Кроме этого, есть еще варианты:

  • Etherscanner — еще один инструмент, который вы можете использовать для поиска внутренних транзакций.
  • Etherquery загружает все данные Ethereum в bigquery, а также имеет механизм для отслеживания внутренних транзакций.
  • Parity-trace_call и Geth-tracer вводят механизмы, которые воспроизводят транзакции и возвращают те вызовы, которые перемещают эфиры.

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 отличается от этого метода, что приводит к путанице и несовместимости.