Go-Ethereum

接收新塊的最快方法

  • September 26, 2017

請原諒我對乙太坊如何運作的某些方面缺乏了解。

我正在創建一個使用 web3 與區塊鏈通信的 DAPP。我需要在某個契約發生後立即接收事件。最好的使用方法是什麼?具體來說,什麼是最可靠的方法,可以在盡可能接近發送事件的時間處理事件。

到目前為止,我一直在使用 Infura 節點,但它們不支持事件呼叫。我現在的替代方案是執行本地乙太坊節點(geth)。這會是快速接收事件的最佳方法嗎?

這裡有哪些重要的考慮因素?網路速度,對等點數量等有很大影響嗎?

該答案僅部分解決了您的問題。

您在乙太坊網路中的邏輯位置(即您擁有哪些對等點)將影響您在任何給定點看到的規範鏈。由於臨時分叉的可能性,如果您立即對一個區塊做出反應,您應該準備好處理該區塊成為“撤消”,如果它是失敗的分叉的一部分。

根據您的應用程序,您可能還希望執行許多獨立節點並使您的軟體能夠最終保持一致,以便您可以同時在多個分叉上;這使您可以更快地對更改做出反應,無論您擊中的是哪個叉子。被認為是規範的鏈(對於任何時刻)取決於您首先收到哪些塊。這意味著不僅你的對等點很重要(因為不同的對等點會認為不同的鍊是規範的),而且你對對等點的延遲也會影響哪個節點geth認為是規範的。只有少數對等方,頻寬不如您的延遲/作業系統處理數據包的能力重要 (1)。因此,您只會看到一個版本的區塊鏈geth例如,事實上,在任何給定時刻都可能有多個版本。因此,如果您只使用一個實例,您實際上可能會相對於獲勝鏈“慢”執行幾個塊。例如,如果您在包含交易A的區塊鏈上並且您對它做出反應,然後鏈在區塊中獲勝並且它包含交易(也在區塊x``a``B``x + 1``b``x),那麼您在處理交易時會遲到一個街區。事實上,因為更多的對等點會對節點的性能產生非零影響,所以如果您的目標是最快的反應時間,那麼實際上可能更可取的是執行更多的物理節點而每個對等點更少。另一方面,如果您的目標是快速傳播某些東西,那麼每個節點有許多對等點可能會有所幫助。

因此,多個節點允許您對出現的不同版本的區塊鏈做出反應。分叉的可能性隨著更慢的塊時間而降低,但仍然非零。

除了接收區塊的時間,如果想要盡快做出反應,還需要處理新的區塊;這意味著一個快速的 CPU,可能具有 AES 加速,以及盡可能快的儲存量。我猜測大量用於記憶體的 RAM 也不會受到傷害,這是基於減輕 EIP150 所必需的攻擊影響的策略。CPU 速度和儲存速度對於 Parity 肯定很重要(正如 Parity 的日誌輸出所報告的那樣),並且 RAM 不足會產生負面影響。不過,我無法告訴您高核心數是否比更高的單執行緒執行頻率更可取。也許我會在這裡將其作為一個問題發布,但這可能取決於傳入塊的內容之類的東西。

(1) 在 100KiB/塊的情況下,在相對適中的 100Mbps 管道上傳輸一個塊需要 8ms(給予或接受)。這與一個數據包通過直達路線從倫敦到巴黎的短距離旅行所花費的時間大致相同。

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