Confirmations

連鎖重組事件的分佈?

  • July 22, 2019

例如,我很好奇鏈重組的頻率,以及它們的深度分佈。這些資訊在任何地方都可用嗎?

這主要是因為我對監控乙太坊節點並將其與 etherscan 的塊歷史進行比較的規則感興趣,以便在節點執行不正確時發出警報。但我也對交易所如何確定他們認為交易結算的深度等問題感興趣。

從過去 20 天內etherscan上的區塊統計數據來看,大約有:

  • 每天 475-525 次深度重組(叔塊)
  • 每天兩次深度重組 1-2 次
  • 我沒有看到三個或更多重組的單一深度

這些數字可能很快就會過時。就在幾個月前,還有一天有 2000 個叔塊的日子。

然而,你必鬚麵對這樣一個現實,即每天都會有大量的單塊重組,並且會發生雙塊重組。

只是從丹尼爾的回答開始,這裡有一個糟糕的 Python 刮板來刮 Etherscan 併計算不同長度的臨時分叉的數量。

結果:

Forks of length 1: 6526
Forks of length 2: 164
Forks of length -: 85699

(注意:我認為這些-值來自較舊的塊,其中深度數據沒有被 Etherscan 記錄……因此用途有限。可能會給出關於長度 1 和 2 叉的相對比率的想法。)


程式碼:

import requests
from bs4 import BeautifulSoup
from collections import OrderedDict

URL = "https://etherscan.io/blocks_forked?p="

def getData(sess, page):
   url = URL + page
   print("Retrieving page", page)
   return BeautifulSoup(sess.get(url).text, 'html.parser')

def getPage(sess, page):
   table = getData(sess, str(page)).find('table')
   return [[X.text.strip() for X in row.find_all('td')] for row in table.find_all('tr')]

def main():
   resp = requests.get(URL)
   sess = requests.Session()

   counts = OrderedDict()

   page = 0
   while True:
       page += 1
       data = getPage(sess, page)

       try:
           for item in data:
               if len(item) != 0:
                   if item[8] in counts:
                       counts[item[8]] += 1
                   else:
                       counts[item[8]] = 1
       except:
           break

   for k, v in counts.items():
       print("Forks of length {}: {}".format(k, v))

if __name__ == "__main__":
   main()

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