Go-Ethereum

如果還有空間,如何立即將交易包含在區塊中?

  • July 17, 2019
  • Geth 版本:1.8.12-stable
  • 作業系統和版本:Linux/OSX

預期行為

交易以發送的區塊號分發到網路並在其中部署。


實際行為

交易被延遲一個區塊時間以在網路上分發,因此延遲一個區塊時間部署。


解釋

我有一個連接到私有乙太坊鏈的小型集群,該鏈使用POA並且阻塞時間固定為 15 秒。集群有四個節點,所有節點都相互連接。請注意,我的集群上有三個簽名者節點。

當我從節點送出交易時;交易不會到達目前區塊上的所有簽名者節點,但會轉移到下一個區塊。但是,我觀察到發送的交易在發送後立即被非簽名者節點接收。

例如; 當我在目前區塊中發送交易時,它不會部署在目前區塊上,而是部署在即將到來的區塊上。因此,這迫使網路在 15 秒到 30 秒之間的 2 個區塊時間內部署交易。

因此,如果我在區塊的第一秒發送交易,首先我需要等待 14 秒等待下一個區塊的到來。並在下一個區塊上再等待 15 秒以部署該事務,因此我總共需要等待 29 秒。


範例案例: alper@home是非簽名者節點,其他節點是簽名者節點。

869,334從名為eBloc@netlab(signer-node)的節點發送了一個塊號內的交易,並且交易在塊號上的alper@home命名節點(非簽名者節點)之後869,334 立即顯示,但即使在我發送的節點上它也沒有顯示在簽名者節點上它從。

在此處輸入圖像描述

在下一個區塊(869,335)上,我觀察到所有節點都收到了交易。

在此處輸入圖像描述

最後在區塊號 ( 869,336) 上部署事務。

在此處輸入圖像描述

=> 如果事務在發送後立即分發到所有集群,則應將其部署在塊號 ( 869,334) 上,但它為此使用了 1 個額外的塊時間。

**$$ Q1 $$**為什麼非簽名者節點在發送後立即收到已發送的交易,而簽名者節點卻沒有?

**$$ Q2 $$**發送的交易在發送後不會立即傳輸到所有網路,但即使所有節點都相互連接也需要額外的 1 個塊時間,這是否正常?有沒有辦法在交易發送後立即將交易轉移到我的所有簽名者節點?

注意:可以在go-ethereum.

這個問題已經被go-ethereum團隊解決了。

@卡拉拉貝:

交易應該同時在網路上傳播。

但是,它不包含在目前區塊中,因為目前正在開采的區塊已經完成。每次彈出新交易時重新創建一個新塊的成本很高。在主網的情況下,無論哪種方式,塊都是滿的,所以沒有多大意義。這就是為什麼在送出和探勘之間總是有 1 個塊的延遲。

但是,對於測試網,我們有一些程式碼可以重新設計礦工,除此之外,我們還希望具有在仍有空間時立即將交易包含到塊中的功能。


我們在 master 分支上重新設計了礦工。目前程式碼將在探勘時每 3 秒重新生成一次塊,因此如果有更多/更好的交易要觸發,節點將選擇它們。

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