Можно ли прослушивать транзакции на определенном адресе ethereum? Например, если кто-то отправит определенное количество ETH на этот адрес, сработает функция обратного вызова.
Я прочитал это: Как изучить все транзакции для данной учетной записи? но это похоже на прошлые транзакции, а не на прослушивание вживую.
Для этого вы можете использовать Web3.js 1.0 и WebSockets .
var subscription = web3.eth.subscribe('logs', {
address: '0x123456..',
}, function(error, result){
if (!error)
console.log(result);
})
.on("data", function(log){
console.log(log);
})
.on("changed", function(log){
});
Если вы используете приведенный выше код, просто обновите address
свойство.
Рабочий образец здесь: https://jsfiddle.net/h7nskoyu/11/
Это смотрит на контракт CryptoKitties, и глядя на консоль, вы видите это:
Расширенная транзакция соответствует этому: https://etherscan.io/tx/0x3ccce0b8072649ca087a91f00bdbb475b36d03a9a8dd2cc54b9a03ac5826c255 .
Узнайте больше о web3.eth.subscribe
здесь .
Это называется концепция непрерывного мониторинга. Вы также можете сделать это с помощью RPC Call. Использование Etherscan API (существует множество платформ, предоставляющих ETH API)
Шаг 1: Получите последнюю высоту блока, используя https://api.etherscan.io/api?module=proxy&action=eth_blockNumber&apikey=YourApiKeyToken .
Шаг 2: Получите всю информацию об этом блоке, используя https://api.etherscan.io/api?module=proxy&action=eth_getBlockByNumber&tag=0x5A0F60&boolean=true&apikey=YourApiKeyToken (вы получите все транзакции в рамках этого блока)
Шаг 3: Теперь сохраните все данные этой транзакции из json в свой список и запустите цикл for для вашего адреса, который вы хотите непрерывно отслеживать.
Итак, теперь, если ваш адрес будет в списке транзакций этого блока, вы можете использовать детали в соответствии с вашими требованиями, иначе вы можете проверить следующий сгенерированный блок через 10-15 секунд (согласно вашему требованию).
Принятый ответ будет работать только для txn к контракту.
Для обнаружения передачи эфира (txn в EOA) вам необходимо настроить прослушиватель для получения последних блоков и запроса массива транзакций блока, чтобы найти соответствие для конкретного требования.
Это будет отслеживать блокчейн для входящей транзакции для адреса.
const monitorTransaction = async (addressss)=>{
const block = await web3.eth.getBlock('latest');
console.log(`Checking new block ${block.number}`)
for(let txHash of block.transactions){
// console.log(txHash);
const tx = await web3.eth.getTransaction(txHash)
// console.log(JSON.stringify(tx));
const tranx = typeof tx === 'string' ? tx.to.toLowerCase() : '';
if(addressss === tranx){
console.log(`New transaction found - Block ${block.number}`);
console.log(`Transaction From: ${tx.from}`);
console.log(`Transaction To: ${tx.to}`);
console.log(JSON.stringify(tx));
}
}
}
str
без ее определения, не учитываются внутренние транзакции.
Юсуф
Шон Табризи
Юсуф
connection not open on send() Error when watching incoming transactions: connection not open connection not open on send() Error when watching incoming transactions: connection not open connection not open on send() Error when watching incoming transactions: connection not open connection not open on send() Error when watching incoming transactions: connection not open
Шон Табризи
var web3 = new Web3('wss://mainnet.infura.io/ws');
, чтобы просто проверить, работает ли ваш код. И если это так, то откройте другой поток для устранения проблем с доступом к вашему Geth WebSocket.Исмаэль
address
это контракт и он генерирует события. Это не будет работать для EOA или если контракт не генерирует события.Филология
Ён Хо