Web3.py

如何在我的應用中自動更新最新的區塊號和待處理的 txns?

  • November 5, 2021

我希望使用 KivyMD 製作一個簡單的應用程序。我想在乙太坊區塊鏈上顯示最新的區塊和待處理的 txns,並讓它隨著每個新區塊自動更新。我正在使用 infura url 和 web3.py。

pending_block = web3.eth.getBlock(block_identifier='pending', full_transactions=True)
pending_transactions = pending_block['transactions']

每次產生新塊時,我該怎麼做才能使應用程序自動獲取此資訊?聽眾?網路套接字?或者使用一個休眠指定時間並呼叫函式來獲取最新數據的while循環?

你需要監聽區塊鏈事件。來自 Web3js文件

var subscription = web3.eth.subscribe('newBlockHeaders', function(error, result){
   if (!error) {
       console.log(result);

       return;
   }

   console.error(error);
})
.on("connected", function(subscriptionId){
   console.log(subscriptionId);
})
.on("data", function(blockHeader){
   console.log(blockHeader);
})
.on("error", console.error);

// unsubscribes the subscription
subscription.unsubscribe(function(error, success){
   if (success) {
       console.log('Successfully unsubscribed!');
   }
});

也許這段程式碼可以幫助你。它包含遞歸函式。

def checkBlockNumber(blockNumber = None):
   if blockNumber:
       if blockNumber == w3.eth.get_block_number():
           time.sleep(1)
           checkBlockNumber(blockNumber)
   else:        
       return w3.eth.get_block_number()

while True:
   block_number = checkBlockNumber()
   print(block_number)
   checkBlockNumber(block_number)

引用自:https://ethereum.stackexchange.com/questions/106264