“vout”欄位到底是什麼?
這讓我發瘋了。通過反複試驗,詢問無數人並嘗試閱讀無休止的文章和手冊,我得出的結論是,列出的“交易”
listsinceblock
具有很大的誤導性。它們根本不是交易嗎?
例如,“txid”欄位不是唯一的。只有與神秘的“vout”欄位結合使用時,它才是獨一無二的,它顯然可以是
0
or1
。這一點,再加上多個不同的“類別”(除了
receive
和send
)真的讓我感到困惑和擔心,我的基於比特幣核心的支付系統不知何故從根本上被破壞了。有人可以一勞永逸地向我解釋為什麼
vout
存在以及為什麼txid
不是唯一的嗎?這在實踐中意味著什麼?這是因為“比特幣支付”可以在多個不同的“子交易”中進行嗎?我一直無法理解這樣做的目的,這讓我非常困惑。既然我實際上已經接近實際推出比特幣服務,我很想把這個弄明白!
vout
是基於 0 的輸出索引。它可能不僅僅是0
or1
,但這些往往是最常見的,因為人們不會進行具有大量輸出的交易。要了解
vout
,您必須了解比特幣交易的實際運作方式。比特幣交易使用交易輸出作為輸入,並創建交易輸出。它可以消費多個交易輸出,並創建多個交易輸出。此外,這些交易輸出可以被不同的交易消費,因此每一個交易都需要能夠被唯一標識。因此,唯一標識符包含兩項:用於標識輸出所屬交易的交易 id,以及指向該特定交易中輸出列表中位置的索引。那個索引是什麼
vout
。與電腦科學中的許多事物一樣,它是一個基於 0 的計數器,因此第一項位於 index0
,第二項位於1
,依此類推。
listsinceblock
,listtransactions
, 和 Bitcoin Core 中的一些其他 RPC 實際上並沒有列出比特幣交易。相反,他們列出了合乎邏輯的交易——人類傾向於想到的交易。這是因為單筆比特幣交易既可以將比特幣從你身邊發送出去,也可以讓你接收比特幣。在單個比特幣交易中,您可以使用自己的交易輸出,因此該交易會將您的比特幣發送出去。然而,並非所有交易都包含來自同一個人的輸入。該交易可能涉及另一個人,該人擁有自己的交易輸出作為該交易的輸入。也許他們正在創造一個你可以消費的產出。所以這個交易也在向你發送比特幣。然後,這個單一的比特幣交易將包含兩個邏輯交易——一個是你發送的地方,一個是你接收的地方。
這通常會發生在更改輸出中,但軟體不應該向您顯示這些,因為它足夠聰明,可以隱藏它們並且不將它們視為一個獨特的邏輯事務。更改輸出是指您創建的交易輸出將比特幣發回給您自己。它們的存在是因為交易輸出必須全部花費,但您實際發送的金額通常與您花費的輸出的確切金額不完全匹配。因此,您必須創建一個輸出,將剩餘部分發回給您自己。
比特幣資金在未使用的*交易輸出 (UTXO)*中進行跟踪。每當您發送比特幣時,您的錢包軟體都會聲明使用了哪些特定的 UTXO,並創建新的 UTXO 以將資金分配給付款方。即使在最簡單的情況下,一筆交易通常也會產生兩種新的輸出:一種用於支付收款人,另一種用於將剩餘的零錢重新分配給發送者。
由於交易可以有多個輸出,因此
txid
不足以唯一地辨識 UTXO。但是,由於交易中輸出的順序是固定的,並且每個位置只能出現一次,因此 UTXO 可以由創建它的交易加上輸出列表中的位置來唯一標識。vout
是交易輸出列表中 UTXO 的索引。我們稱其txid:vout
為UTXO的外點。在這個來自blockstream.info的帶註釋的螢幕截圖中,您可以看到 transaction
39b6bcf049fbfba73c2e594327cafd4f93b1c23979e138d4c56ab3b7d04172ad
。它花費了一個 UTXO,即 transaction 的第 5 個輸出(vout:4,我們從 0 開始計數) ,並創建了 7 個標識為through的cc90096df338a6894aeef47043b995942758a1dfe52e579560e39730602a7ca4
新 UTXO 。39b6bc…4172ad:0``39b6bc…4172ad:6
listsinceblock
僅告訴您促進向您的錢包付款或從您的錢包付款的輸出。接收時,這是記入您錢包的輸出,發送時,它顯示支付接收者的輸出。