Ist es möglich, Transaktionen auf einer bestimmten Ethereum-Adresse abzuhören? Sendet beispielsweise jemand eine bestimmte Menge ETH an diese Adresse, wird die Callback-Funktion ausgelöst.
Ich habe dies gelesen: Wie erkunde ich alle Transaktionen für ein bestimmtes Konto? aber es scheint um vergangene Transaktionen zu gehen und nicht um Live-Zuhören.
Dazu können Sie Web3.js 1.0 und WebSockets verwenden.
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){
});
Wenn Sie den obigen Code verwenden, aktualisieren Sie einfach die address
Eigenschaft.
Arbeitsbeispiel hier: https://jsfiddle.net/h7nskoyu/11/
Dies sieht sich den CryptoKitties-Vertrag an, und wenn Sie sich die Konsole ansehen, sehen Sie Folgendes:
Die erweiterte Transaktion entspricht dem: https://etherscan.io/tx/0x3ccce0b8072649ca087a91f00bdbb475b36d03a9a8dd2cc54b9a03ac5826c255
web3.eth.subscribe
Erfahren Sie hier mehr darüber .
Es heißt Kontinuierliches Überwachungskonzept. Sie können dies auch mit RPC Call tun. Verwenden der Etherscan-API (Es gibt viele Plattformen, die die ETH-API bereitstellen)
Schritt 1: Holen Sie sich die neueste Blockhöhe mit https://api.etherscan.io/api?module=proxy&action=eth_blockNumber&apikey=YourApiKeyToken
Schritt 2: Erhalten Sie alle Details dieses Blocks mit https://api.etherscan.io/api?module=proxy&action=eth_getBlockByNumber&tag=0x5A0F60&boolean=true&apikey=YourApiKeyToken (Sie erhalten alle Transaktionen unter diesem Block)
Schritt 3: Speichern Sie nun alle Daten dieser Transaktion von json in Ihrer Liste und führen Sie eine for-Schleife für Ihre Adresse aus, die Sie kontinuierlich überwachen möchten.
Wenn sich Ihre Adresse nun in der Transaktionsliste dieses Blocks befindet, können Sie Details gemäß Ihren Anforderungen verwenden. Andernfalls können Sie den nächsten generierten Block nach 10 bis 15 Sekunden (gemäß Ihren Anforderungen) überprüfen.
Die akzeptierte Antwort funktioniert nur für txn an einen Vertrag.
Um Ether-Transfers ( txn zu EOAs ) zu erkennen, müssen Sie einen Listener einrichten, um die neuesten Blöcke abzurufen und das Transaktions-Array des Blocks abzufragen, um eine Übereinstimmung für eine bestimmte Anforderung zu finden.
Dadurch wird die Blockchain auf eingehende Transaktionen für eine Adresse überwacht
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
ohne sie zu definieren, berücksichtigt keine internen Transaktionen.
Yousuf
Shawn Tabrizi
Yousuf
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
Shawn Tabrizi
var web3 = new Web3('wss://mainnet.infura.io/ws');
einfach zu testen, ob Ihr Code funktioniert. Und wenn dies der Fall ist, öffnen Sie einen weiteren Thread, um Probleme beim Zugriff auf Ihren Geth-WebSocket zu debuggen.Ismael
address
es sich um einen Vertrag handelt und Ereignisse generiert. Dies funktioniert nicht für EOA oder wenn der Vertrag keine Ereignisse generiert.Philologie
Junge ho