Transactions

關於交易廣播和區塊創建的問題

  • October 13, 2021

假設我們有交易 X 和交易 Y。X 的時間戳在時間上早於 Y 的時間戳。X 的支出者將 X 廣播到網路,對於 Y 的支出者也是如此。

假設礦工首先收到 Y 並將其添加到下一個塊中,該塊達到儲存交易的最大數量。在這個之後,X 會被包含在區塊中嗎?會被丟棄嗎?

如果 X 將在此之後包含到塊中,那麼它發生在 Y 之前不是問題嗎?

提前感謝您的回答!

事務本身沒有時間戳的儲存結構。所以交易不知道它們是什麼時候創建的。但是,在將交易捆綁到一個塊中之後,在解決雜湊問題以解決該塊的同時,礦工在塊級別插入時間戳。

因此,即使實際上按時間順序較早的交易來得較晚,如果目前塊已滿,它將被包含到下一個塊中。低手續費交易大多遇到這種情況

想像一下愛麗絲正在付錢給鮑勃

愛麗絲在交易上加了一個時間鎖,

  • 時間鎖是事務級別的負擔。也就是說,如果事務沒有超過其鎖定時間,則該事務是無效的並且不會傳播。
  • 但是要知道,鎖定時間事務正在花費(引用)的 UTXO 可以免費使用。因此,當 Alice 向 Bob 顯示該交易處於timelock下時,Alice 可以同時花費引用的 UTXO 並在該交易準備好傳播(過去的時間鎖)之後使該 timelocked 交易無效,並且可以說 Bob 被騙了。

Bob 要求 Alice 使用CheckLockTimeVerify

  • CLTV 是一個UTXO 級別的負擔。因此,來自 Alice 的交易將作為有效交易通過,並將一個 UTXO 添加到 Bob 的 UTXO 集中。只有在 UTXO 中指定的時間過去後,該 UTXO 才可使用。
  • 因此,如果 Bob 想要花費該 UTXO,他必須創建一個引用該 UTXO 的交易,並且在 UTXO 上的時間鎖值大於或等於 CLTV 值

這樣,Alice 已經向 Bob 支付(發送了 UTXO)並且 Bob 可以確定他不會得到無效的交易。

如果我不理解您的問題,您指的是交易中的 lockTime 而不是塊時間戳。

lockTime 是一個 int 值,該值表示“何時可以將交易解鎖到輸入”而不是“何時發布交易”

鎖定時間:定義交易被認為有效並且可以在比特幣網路上傳輸的第一個時刻,用一個介於 0 到 5 億之間的整數值表示,根據分配的值假設不同的含義,即:

  • 鎖定時間 = 0:事務在創建的瞬間傳播和執行。
  • 0 < LockTime <= 500:該值被解釋為區塊高度,即只有高度等於鎖定時間值的區塊被發布後,該交易才有效。
  • 鎖定時間> 5 億:該值被解釋為 unix 時間戳,因此交易僅在鎖定時間值表示的日期之後才有效。

如果您的意思是事務是否有時間戳,答案是兩個:

  • 在該結構中,事務沒有時間戳,而是鎖定時間。
  • 交易可能在塊中具有插入時刻,這取決於塊,因為是他將時間戳作為值保存。

一個真實的案例:我的交易的區塊時間戳等於2019 年 8 月 23 日下午 2:08:43 GMT + 2,這表示礦工開始加密挑戰的時間,也是礦工還考慮了我的交易,包括在區塊中。我的事務的 lockTime 為 0,因為它是立即執行事務。

沒有人會說我在區塊發布之前的交易也在其他區塊內,時間戳略有不同

如果您想詳細了解交易的內容和方式,我建議您閱讀比特幣書籍

來自比特幣開發者的更新

在評論中,Pieter Wuille 在下面的評論中發布了以下答案並解釋了我的答案是錯誤的,下面報導了一個非常精確的答案

交易的 nLockTime 決定了它可以包含在一個塊中的最早可能時間。擁有一個包含鎖定時間尚未過去的交易的塊是非法的。然而,有一些機制可以強制交易輸出只能用於具有一定鎖定時間的未來交易 - 淨效果是該輸出可以包含在鏈上,但在這段時間過去之前,交易不能花費它。

引用自:https://bitcoin.stackexchange.com/questions/89905