Transactions
交易在記憶體池中時如何使用輸出
我在區塊瀏覽器上看到了交易,其中交易在記憶體池中(未確認),但其中一個輸出已經顯示為已用,我很好奇這是如何工作的。這個問題是這個問題的重複,但那裡的答案並不能完全滿足我的困惑。我正在考慮如何將此過程與此處列出的“tx”消息的協議規則結合使用,特別是規則 9、10、12。
對於每個輸入,如果引用的輸出存在於池中的任何其他 tx 中,則拒絕此交易。
對於每個輸入,在主分支和交易池中查找引用的輸出交易。如果任何輸入缺少輸出交易,這將是一個孤立交易。如果匹配的交易還沒有,則添加到孤立交易中。
對於每個輸入,如果引用的輸出不存在(例如從未存在或已經花費),則拒絕此交易
問題:
- 可能引起混淆的部分原因是塊瀏覽器上“花費”的定義 - 當它聲稱輸出已花費時,這是否等同於“至少在記憶體池中存在使用輸出作為輸入的事務”?
- 使用未經確認的 tx 的輸出作為輸入來廣播 tx 消息的能力似乎明顯違反了規則 9。不是嗎?
- 規則 9 和 10 似乎相互矛盾。規則 9 說如果輸出在 mempool 中的 tx 中,則拒絕,規則 10 說檢查 mempool 的輸出(好像它是允許的)。他們不是嗎?
- 我相信完整節點會保留一個“UTXO”集來驗證其中的一些標準——一旦交易到達記憶體池(即不等待確認),UTXO 集是否會更新?
- mempool 是否相對於一個節點?即,如果我廣播交易並且節點接受它為有效,那麼它是否會傳遞交易,以便其他節點可以將其添加到“他們的”記憶體池中,或者是否存在任何經過驗證的交易都可以發送的“中央記憶體池”到。
- 是否可以取消已添加到 mempool 的 tx 消息?我不是在問典型的軟體是否具有此功能 - 但理論上對於高級使用者是否可行,或者它是否是比特幣協議中的“允許行為”。
沒有規定要求交易在花費之前進行確認。
- 是的,記憶體池很重要。這也是檢測雙花的方式。因此,重要的節點檢查記憶體池,而不僅僅是以前的塊。
- 不,它不違反規則,他們指的是如果記憶體池中存在相同的輸出,則拒絕雙花。
- IDK,也許問原始發布者他們的意思是什麼?
- 是的,無需任何確認即可成為未使用的交易輸出。
- 節點到節點的記憶體池並不總是相同的。例如,一些節點有不同的最小中繼規則,可能包括極低的費用交易。沒有中央記憶體池。
- 並不真地。我最近沒有這樣做,但假設您以 0 費用廣播交易。該交易可能會卡在記憶體池中而無法得到確認。14 天后,如果它沒有被包含在一個塊中,它就會“過期”。一旦過期/丟棄,我可以使用與原始交易相同的 UTXO 來製作新交易。
這裡有一個你可能會感興趣的相關問題: