Где я могу найти незавершенные транзакции?

Я хотел знать, где я могу найти текущую ожидающую транзакцию для учетной записи, которая не зафиксирована. Это вообще возможно? Как я могу получить хэши транзакций для ожидающих обработки транзакций? Любой API для этой цели?

Ответы (2)

Ну, я знаю один способ, который должен работать.

Используйте консоль web3js или geth и вызывайте любую функцию/транзакцию. Если вы используете этот .sendTransaction()метод, он вернет хэш транзакции, который вы затем будете использовать для поиска статуса транзакции.

Далее, используя Etherscan API, вы можете использовать конечную точку транзакции:

https://etherscan.io/api?module=localchk&action=txexist&txhash=<<TX HASH>>

Ответ должен выглядеть так:

{"status":"1","message":"OK","result":"False"}

Затем используйте API транзакций Etherscan. Он не сообщит вам, ожидает ли он, но если транзакция прошла успешно/ошибка, он вернет другой ответ:

https://api-rinkeby.etherscan.io/api?module=transaction&action=getstatus&txhash=<<TX HASH>>&apikey=<<API KEY>>

{"status":"1","message":"OK","result":{"isError":"0","errDescription":""}}

Если isErrorда, 0то транзакция прошла успешно. Если isErrorда, 1то транзакция не удалась.

Подводя итог, до тех пор, пока вы получаете хэш транзакции от .sendTransaction()(чтобы вы знали, что это действительная транзакция), теперь вы можете попасть в первую конечную точку с помощью ?action=txexists, которая вернется, если tx существует. Затем вы можете нажать на вторую конечную точку, чтобы увидеть, прошла ли TX или нет. Таким образом, прежде чем вам нужно будет попасть во вторую конечную точку, вы будете знать, что TX находится в ожидании, поскольку он еще не существует.

Если приведенный выше метод слишком запутан для вас, ниже показано, как Etherscan.io в настоящее время получает ожидающие транзакции.

Я вытащил его из исходного кода их сайта.

var interval;
var loopcounter = 1;

// startTxPendingCheck is a global window variable set by another script

if (startTxPendingCheck) {
    var div = document.getElementById('spinnerwait');
    div.style.display = 'block';
    interval = setTimeout(checkForConfirmedTx, 2000);
    function checkForConfirmedTx() {
        if (loopcounter < 45) {
            $.ajax({
                url: "/api?module=localchk&action=txexist&txhash=" + txHash,
                type: "GET",
                success: function(data) {
                    if (data.result == "True") {
                        window.location.href = "/tx/" + txHash;
                    }
                },
                dataType: "json"
            })
            loopcounter = loopcounter + 1;
            interval = setTimeout(checkForConfirmedTx, 20000);
        } else {
            stopInterval();
        }
    }
    function stopInterval() {
        console.log("stopInterval called");
        var div = document.getElementById('spinnerwait');
        div.style.display = 'none';
        clearTimeout(interval);
    }
    function startInterval() {
        console.log("startInterval called");
        clearTimeout(interval);
        var div = document.getElementById('spinnerwait');
        div.style.display = 'block';
        interval = setTimeout(checkForConfirmedTx, 5000);
    }
}

Чтобы найти все незавершенные транзакции, перейдите на https://etherscan.io/ и найдите адрес своей учетной записи . вы получите там все транзакции с их статусами. Кроме того, etherscan предоставляет вам API для получения всех этих деталей.

Я думаю, что этот API показывает только транзакции, которые не совершены?