Script
從時間鎖定的 UTXO 中花費的嘗試是否被拒絕?
背景
我正在閱讀一些關於閃電網路背景下的比特幣時間鎖定交易的資訊。從未解釋過的一件事是,當人們試圖過早地花費一個時間鎖定的 UTXO 的輸出時會發生什麼。
例子
Alice 通過交易 T 向地址 B 的 Bob 發送 1 BTC,輸出 0。但交易是時間鎖定的,直到目前為 H 的區塊高度達到 H+100。所以要花費 T:0,Bob 需要兩件事:
- 地址B對應的私鑰
- 足夠的時間使塊高度達到 H+100。
Bob 不耐煩,試圖在塊高 H+30 時花費 T:0。他廣播了交易。
題
**Bob 的交易會發生什麼?**由於 H+100 尚未發生,礦工是否會忽略它而驗證者會拒絕它?我一直認為這就是發生的事情。交易被簡單地丟棄。
但是在研究閃電網路時,時間鎖定的交易在其中發揮著關鍵作用,通道對等方試圖通過廣播來自先前狀態的時間鎖定的 TX 來欺騙他的合作夥伴並不是聞所未聞的。實際上,無辜的一方可以在區塊鏈上看到這筆交易,並以某種方式使用該交易中顯示的一些數據作為他們自己的懲罰交易的輸入。此外,該懲罰交易必須在時間鎖定的作弊交易通過*之前執行。*這就是我不明白的。如果它已經被礦工和驗證者拒絕,無辜的一方甚至如何看到這種流氓交易嘗試?
還是我假設礦工拒絕依賴於尚未命中的時間鎖定輸入的交易不正確?
我將只解決您問題的第一部分,因為我認為您的困惑的根源可以在那裡解決。
比特幣中的時間鎖定是指兩個相關且相互作用但根本不同的概念:
- 事務可以有一個鎖定時間。這是每個交易的欄位 (
nLockTime
),它大致確定了該交易可以包含在鏈中的最早時間或高度。未來有locktime的交易不是無效的;在所述時間過去之前,將其包含在鏈中是不可接受的。今天大多數比特幣節點不會中繼交易,除非它們有資格在下一個區塊中進行探勘。- 腳本可以使用 OP_CHECKLOCKTIME 操作碼強制鎖定時間。該操作碼要求該腳本的支出交易具有
nLockTime
不低於提供值的欄位。它不直接與時間或高度互動。它所做的只是要求支出交易將自己限制在未來,而沒有這種交易的交易nLockTime
是無條件無效的,並且永遠無法被探勘。結果當然是在所述時間過去之前不能使用該輸出,但是該關係被分成兩部分。兩者的這種分離具有許多優點。這意味著腳本只需要執行一次;我們不需要在每次時間/高度發生變化時重新執行以重新評估它們是否仍然有效。這也意味著交易不能隨著時間的推移而使自己失效——一旦有效(並且可以被探勘),除非雙花,否則交易不會變得不可接受。
所以你的問題的答案取決於事務如何違反時間鎖:
- 如果交易的欄位太低
nLockTime
,交易只是無條件無效。- 如果交易有一個正確的
nLockTime
欄位,但它的時間還沒有到來,則該交易不具備挖礦或中繼的資格,但當時間到來時,任何人都可以廣播它並獲得它。