Transactions

如何在測試網上使用鎖定時間進行交易?

  • July 5, 2019

我試圖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 在輸出鎖定腳本中指定,當花費這些輸出時,使用者必須設置nLocktimenSequence值以滿足鎖定條件。

液晶電視

使用您的範例,下面將是輸出中 CLTV 的腳本和輸出的十六進制。所需的塊高度為 1567415,即十六進制的 0x17eab7 和 little-endian 的 0xb7ea17。nLocktimevalue 應該等於或大於此數字,以便使用 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 鎖定腳本。這不僅可以確保您為進行此交易支付較低的費用,而且還可以確保您的隱私(沒有人會知道他們的交易是時間鎖定的),直到您花費該交易。

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