UTXO如何轉發到其他地址?
這是一個非常籠統的概念性問題。我覺得我還沒有完全理解區塊鏈的交易動態。
假設我們在區塊鏈上有 A、B 和 C 交易:
- A 之前已將 10BTC 轉移給 B。因此 B 有一個由 A 的地址引用的未使用的交易輸出(它可以花費)。
- 現在,B 想要向 C 支付 5BTC,並通過使用它從 A 的早期交易中獲得的 UTXO 並將其路由到 C 來實現。
- 因此,B 將帶有 A 地址的 UTXO 轉發給 C,並給自己 5BTC 找零。
那麼,現在,交易清單不就是這個樣子嗎?
輸入:
- 地址_A 10BTC
輸出:
- 地址_C 5BTC
- 地址_B 5BTC
現在,在我看來,從 B 的角度來看,這似乎是正確的,但實際上看起來 A 向 C 和 B 轉賬,而不是 B 向 C 轉賬。我想我的理解是錯誤的,因為它不能像這樣工作。那麼我的錯誤在哪裡?
從C的角度來看,不應該是這樣的:
輸入:
- 地址_B 10BTC
輸出:
- 地址_C 5BTC
- 地址_B 5BTC
否則,C 也將再次獲得 A 的未使用輸出,並且 A 的此輸出將一次又一次地轉發。
請不要因為我的理解不好而評判我:D,如果有任何好的讀物可以推薦,那就太好了。
謝謝!
最佳,JC
首先要糾正的是,UTXO 不是由地址引用,而是由創建它們的 txid 引用。這些地址純粹是人類對鎖定條件的抽象,以幫助考慮所有權。
因此,在您的範例中,發生的情況是在 A 創建的初始交易 tx0 中,B 被記入 10 BTC。假設交易只有一個輸出。這意味著現在 UTXO 的狀態是:
- tx0:0(10 BTC,B 可消費)
當 B 現在想向 C 付款時,他創建了一個交易 tx1,輸入為 (tx0:0, (B 簽名)),消耗上面列出的 UTXO,並有輸出 (tx1:0, 5 BTC, (由 C 花費)) and ((tx1:1, 5 BTC, (spendable by B)). 注意 tx1:0 和 tx1:1 並沒有實際儲存在此處的交易中;它們隱含為 tx1 的第 0 和第 1 輸出。
UTXO 集的狀態現在是:
- tx1:0(5 BTC,C 可消費)
- tx1:1(5 BTC,B 可消費)
UTXO 由它們的outpoint唯一標識。輸出點由創建輸出的事務的 id 和輸出列表中的位置組成。由於事務 id 是完整事務主體的雜湊,它們是抗衝突的,並且由於輸出列表中的每個位置只能出現一次,因此可以預期外點是唯一的。
例如,我在 blockexplorer 上找到的這個隨機交易的第二個輸出是
c0352a…21bf50:1
. (第一個輸出是c0352a…21bf50:0
。)現在,當您想要花費一個 UTXO 時,您將通過其輸出點準確引用輸入中的哪一個。UTXO 不會被轉發,而是一個交易命令比特幣網路銷毀/無效/消耗輸入中列出的所有 UTXO,並按照輸出列表中的指定創建新的交易輸出。