Bitcoind

如何確定輸入或輸出是隔離見證?

  • January 14, 2018

我正在嘗試檢查一個塊中的交易並確定有多少 segwit 輸入或輸出。

我在 getrawtransaction 中註意到 segwit 輸入似乎有一個 ’txinwitness’ 欄位。這是對它們進行分類的好方法嗎?

對於輸出,我知道我不能只查看 3* 地址,因為並非所有 p2sh 都是 segwit。那麼那裡最好的方法是什麼?

編輯:我剛剛發現這個頁面關於 3* 地址。SegWit 地址和 P2SH 地址之間的區別

我是否正確地將其解釋為您無法確定輸出是否為隔離見證?只有一個輸入?

我正在嘗試檢查一個塊中的交易並確定有多少 segwit 輸入或輸出。

BIP141 在交易開始時定義了一個 segwit tx 標記和一個標誌。所以如果你分解這樣一個 tx,你會看到帶有標誌,如果有 SegWit:

raw tx is: ### raw tx is this:
01000000000102FFF7F7881A8099AFA6940D42D1E7F6362BEC38171EA3EDF433541DB4E4AD969F000000004948
30450221008B9D1DC26BA6A9CB62127B02742FA9D754CD3BEBF337F7A55D114C8E5CDD30BE022040529B194BA3
F9281A99F2B1C0A19C0489BC22EDE944CCF4ECBAB4CC618EF3ED01EEFFFFFFEF51E1B804CC89D182D279655C3A
A89E815B1B309FE287D9B2B55D57B90EC68A0100000000FFFFFFFF02202CB206000000001976A9148280B37DF3
78DB99F66F85C95A783A76AC7A6D5988AC9093510D000000001976A9143BDE42DBEE7E4DBE6A21B2D50CE2F016
7FAA815988AC000247304402203609E17B84F6A7D30C80BFA610B5B4542F32A8A0D5447A12FB1366D7F01CC44A
0220573A954C4518331561406F90300E8F3358F51928D43C212A8CAED02DE67EEBEE0121025476C2E83188368D
A1FF3E292E7ACAFCDB3566BB0AD253F62FC70F07AEEE635711000000


VERSION
01000000

SEGWIT (BIP141): this is a segwit tx, marker=00
      (BIP141): flag=01

TX_IN COUNT [var_int]: hex=02, decimal=2
TX_IN[0]
 TX_IN[0]       9F96ADE4B41D5433F4EDA31E1738EC2B36F6E7D1420D94A6AF99801A88F7F7FF
 TX_IN[0] hex=00000000, reversed=00000000, decimal=0
 TX_IN[0] Script Length hex=49, decimal=73
 TX_IN[0] Script Sig 4830450221008B9D1DC26BA6A9CB62127B02742FA9D754CD3BEBF337F7A55D114C8E5CDD30BE022040529B19
4BA3F9281A99F2B1C0A19C0489BC22EDE944CCF4ECBAB4CC618EF3ED01 
 TX_IN[0] Sequence (uint32_t)
 EEFFFFFF
TX_IN[1]
 TX_IN[1] 8AC60EB9575DB5B2D987E29F301B5B819EA83A5C6579D282D189CC04B8E151EF
 TX_IN[1] OutPoint index hex=01000000, reversed=00000001, decimal=1
 TX_IN[1] Script Length hex=00, decimal=0
 TX_IN[1] Sequence FFFFFFFF

TX_OUT COUNT, hex=02, decimal=2
TX_OUT[0]
...

WITNESS TXIN[0] stack elements: hex=00, decimal=0
WITNESS TXIN[1] stack elements: hex=02, decimal=2
WITNESS data[0]:
 47304402203609E17B84F6A7D30C80BFA610B5B4542F32A8A0D5447A12FB1366D7F01CC44A0220573A954C4518331561406F90300E8F3358F51928D43C212A8CAED02DE67EEBEE01
WITNESS data[1]:
 21025476C2E83188368DA1FF3E292E7ACAFCDB3566BB0AD253F62FC70F07AEEE6357

LOCK_TIME
11000000

由於這是一個有兩個輸入的 tx,第一個輸入是非 segwit(因此在 V_IN 部分中有一個簽名),第二個輸入是 segwit(腳本長度 = 0),第二個輸入的見證被添加到末尾德克薩斯州

我是否正確地將其解釋為您無法確定輸出是否為隔離見證?只有一個輸入?

使用 P2SH,您獲取一組原始數據,並通過雜湊函式執行它。由於散列函式是不可逆的(就今天的知識而言),您無法知道 P2SH 內部是什麼。通常的案例是多重簽名交易。但也可以是其他東西,只有當支出交易在區塊鏈中時,你才能看到之前在裡面的東西。因此,這為 tx 提供資金和花費 tx 之間的時間增加了一定的隱私層。

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