如果還有空間,如何立即將交易包含在區塊中?
- 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 秒重新生成一次塊,因此如果有更多/更好的交易要觸發,節點將選擇它們。