如何在測試網上使用鎖定時間進行交易?
我試圖
nLocktime
在比特幣測試網上進行交易。我無法播放它。有人可以幫我做一個 1 輸入和 1 輸出的基本交易,以便我可以在測試網上廣播。(p2pkh -> p2pkh)案例:
mvvz9TNZ37fFnUHXZPUJYV3MDutbkb9ipA -> mgGUnb6BhgxzrjWau4X4WD9Lfp9YS4kMy7 Transfering: 0.017 BTC at block height 1567415 (now 1567406)
原始交易(簽名前):
020000000140c96a4c43a5db3c57be3fd92f491a5d40ccf00afe349c596bc35fac7bbee59a000000001976a914a9156a64ea643e7c4db772c96c6a570712e0cc1988acfeffffff01a0f01900000000001976a914083b56fb8b320a6373d4738bb81496b096e8034c88acb7ea170001000000
簽名後:
020000000140c96a4c43a5db3c57be3fd92f491a5d40ccf00afe349c596bc35fac7bbee59a000000008a4730440220271919b389ed3b635522167d3e2a0201cd85d67941816af4c1638664054c078202203b93ddf929692c2a6d081ef422de9f375183fd595e8ca9e8135af86e47e47c580141043db79f05b69d34dfd3d8658a557ddb6b1a8ebca9070968b1e3833ca6b581d8a30073638dafca0bf6a5a2a08ff89ce91186fefa5a46d2a3349eb47904ab981114feffffff01a0f01900000000001976a914083b56fb8b320a6373d4738bb81496b096e8034c88acb7ea1700
如何使用 CLTV 和 CSV?
注意:雖然這個答案是為測試網編寫的,但它對主網也絕對有效。腳本類似,只是地址編碼不同(P2PKH 以 1 開頭,而測試網的 m 開頭,因為我們在主網地址 base58check 中使用 0x00 作為前綴)。
我試圖在比特幣測試網上與 Locktime 進行交易。我無法播放它。
指定時
nLocktime
,您無法廣播交易,直到nLocktime
達到該值。在您的情況下,在編寫此答案時,測試網高度為 1567414,而nLocktime
設置為 1567415。除此之外,從腳本的角度來看,您的交易是正確的。以及如何使用 CLTV 和 CSV?
CLTV 和 CSV 是腳本級時間鎖,與
nLocktime
事務nSequence
和輸入級時間鎖不同。CLTV 或 CSV 在輸出鎖定腳本中指定,當花費這些輸出時,使用者必須設置nLocktime
或nSequence
值以滿足鎖定條件。液晶電視
使用您的範例,下面將是輸出中 CLTV 的腳本和輸出的十六進制。所需的塊高度為 1567415,即十六進制的 0x17eab7 和 little-endian 的 0xb7ea17。
nLocktime
value 應該等於或大於此數字,以便使用 CLTV 鎖定的輸出。因此,該交易通過的nLocktime
值應等於或低於目前塊高度,即等於 0x0017eaae (1567406) 或小端序中的 0xaeea1700。但是,請注意,當使用 CLTV 鎖定的這個輸出作為交易的輸入時,您nsequence
應該在 0xf0000000 到 0xffffffffe 之間。使用 0xffffffff 禁用時間鎖定。"vout": [ { "value": 0.01700000, "n": 0, "scriptPubKey": { "asm": "b7ea17 OP_CHECKLOCKTIMEVERIFY OP_DROP OP_DUP OP_HASH160 083b56fb8b320a6373d4738bb81496b096e8034c OP_EQUALVERIFY OP_CHECKSIG", "hex": "03b7ea17b17576a914083b56fb8b320a6373d4738bb81496b096e8034c88ac", "reqSigs": 1, "type": "pubkeyhash", "addresses": [ "mgGUnb6BhgxzrjWau4X4WD9Lfp9YS4kMy7 " ] } } ]
使用此輸出到您的未簽名交易十六進制,它會提供以下腳本:
Raw transaction before signing: 020000000140c96a4c43a5db3c57be3fd92f491a5d40ccf00afe349c596bc35fac7bbee59a000000001976a914a9156a64ea643e7c4db772c96c6a570712e0cc1988acfeffffff01a0f01900000000001f03b7ea17b17576a914083b56fb8b320a6373d4738bb81496b096e8034c88acaeea170001000000
CSV
CSV 是一個相對時間鎖,因此提供了相對意義上的塊高度。例如,在您的情況下,測試網高度為 1567406,而您希望交易在高度 1567415 處花費。所以您的相對高度是 9 個塊。我們使用
nLocktime
目前交易作為目前區塊高度,即小端序中的 0xaeea1700。"vout": [ { "value": 0.01700000, "n": 0, "scriptPubKey": { "asm": "09 OP_CHECKSEQUENCEVERIFY OP_DROP OP_DUP OP_HASH160 083b56fb8b320a6373d4738bb81496b096e8034c OP_EQUALVERIFY OP_CHECKSIG", "hex": "0109b27576a914083b56fb8b320a6373d4738bb81496b096e8034c88ac", "reqSigs": 1, "type": "pubkeyhash", "addresses": [ "mgGUnb6BhgxzrjWau4X4WD9Lfp9YS4kMy7 " ] } } ]
在您指定的未簽名事務十六進制中使用此輸出腳本可以為我們提供:
Raw transaction before signing: 020000000140c96a4c43a5db3c57be3fd92f491a5d40ccf00afe349c596bc35fac7bbee59a000000001976a914a9156a64ea643e7c4db772c96c6a570712e0cc1988acfeffffff01a0f01900000000001d0109b27576a914083b56fb8b320a6373d4738bb81496b096e8034c88acaeea170001000000
在使用此 CSV 鎖定輸出時,您需要記住以下幾點: (1)
nSequence <= 0xEFFFFFFF
; (2)nSequence
的第 22 位確定相對鎖定時間是基於時間還是基於塊。該位應設置為 0,因為您的 CSV 被鎖定在塊中;(3) 相對鎖定時間的值,然後從nSequence
.雖然我在 中以原始形式(使用 CLTV/CSV)顯示了鎖定腳本
scriptPubKey
,但建議使用此原始腳本創建 P2SH 鎖定腳本。這不僅可以確保您為進行此交易支付較低的費用,而且還可以確保您的隱私(沒有人會知道他們的交易是時間鎖定的),直到您花費該交易。