Development
如何使用 CHECKLOCKTIMEVERIFY 防止在 100 個塊之前花費交易?
我正在創建一個基於比特幣的彩票應用程序。進入彩票是一筆花費 1BTC 的交易。
如果有人猜對了某個任意值,他們可以認領該條目並將這 1 Btc 發送到他們控制的地址。
我希望有如下功能:如果在 100 個區塊之後沒有人猜對正確的數字,那麼我可以聲稱它是彩票的運營商。
我可以通過以下方式執行此操作: 輸入交易 IF CHECKLOCKTIMEVERIFY 支付給正確的猜測 ELSE 支付給我的運營商公鑰 END
然後當我嘗試花費這個入口交易時,我將 nLockTime 設置為目前塊。
在整個過程中,我將所有序列號設置為 0xFFF … 這樣就可以探勘交易。
是的,您可以使用
OP_CHECKLOCKTIMEVERIFY
使交易輸出在一定數量的塊中不可花費。但是,您不能像您所描述的那樣直接在 if-else 塊中使用它。執行時OP_CHECKLOCKTIMEVERIFY
,它不會將結果值放入堆棧。它要麼拋出錯誤(使試圖花費輸出的事務無效),要麼繼續執行,就好像什麼都沒發生一樣。要按照您的描述創建交易,您將需要使用多重簽名,以便一方可以在提供正確的數字後立即花費交易(我猜是雜湊函式的輸入?),或者您可以將其花費回鎖定時間到期後自己。這基本上就是閃電網路的工作原理。你應該查看閃電網路第二部分:雜湊時間鎖合約(HTLCs)