Synchronization
僅監視客戶端的最後一個塊可能會變得陳舊嗎?
讓我們有一個僅用於監視目的的乙太坊節點(它不創建任何交易,只是更新它是整個鏈的副本)。
為了在大多數乙太坊庫(尤其是 web3j 和 EthereumJ)中獲得有關鏈中頂級塊的通知,我們應該編寫一些帶有最終將被呼叫的方法的偵聽器類。像這樣的東西:
class EthereumListener { public void onBlock(Block block) { long blockNumber = block.getNumber(); //... } }
我的問題是:我可以確定
block
正在通知的聽眾已經在主鏈上並且不會過時嗎?換句話說:可能
block
是叔叔嗎?可能是如果我稍後向客戶詢問具有此編號的塊,我會得到一個具有不同內容的塊,因為叔塊被客戶副本中的有效塊替換了?如果答案是“是”,我的第二個問題是:庫(web3j 或 EthereumJ)
onBlock
在替換 Uncle 塊時是否通過方法通知我新的有效塊?換句話說:不同的方法
blockNumber
呼叫之間可能相同嗎?onBlock
不,不確定一個塊不會被另一個塊替換。一個區塊的確認越多,它被替換的可能性就越小。你永遠不會有 100% 的信心,它不會被替換,但要求多次確認你可以有一個非常高的信心,實際上它會非常接近 100%。