2022年4月,據安全團隊消息,UTXO多簽機制可被用於發起對交易所的假充值攻擊。起因是獲取交易數據接口返回結果中對MultiSig 類型交易展示不完善。如果交易所、錢包客戶端或者其它中心化服務僅根據返回結果進行入賬判斷,可能造成誤判導致假充值。目前已知可能受此多簽特性影響的幣種有BTC/LTC/DOGE/BCH/BSV/BHD/CPU/DFI/BTCV/BXC/ZCL等。

什麼是UTXO?

我們經常會在區塊鏈瀏覽器看到地址餘額等信息,然而,比特幣不使用“賬戶-餘額” 的模式來表示價值。 UTXO全稱Unspent Transaction Outputs,表示未花費交易輸出,被用作比特幣交易的輸出。一筆交易由輸入和輸出組成,而UTXO 是這個交易輸入輸出的一部分,所以我們也稱UTXO 是交易最基本的組成單元。

創世交易-輸出交易

有些特殊交易沒有輸入,只有輸出,這樣的交易我們稱之為coinbase 交易,也被稱為創世交易(這個coinbase交易和上市公司Coinbase 沒有關係)。因為這筆交易為比特幣系統創造了比特幣,這筆創造出來的比特幣就是系統對於礦工的工作量證明的獎勵,也就是所說的比特幣礦工的“爆塊獎勵”。使用Tokenview 比特幣區塊瀏覽器查看區塊鏈第一筆交易:

https://btc.tokenview.com/cn/tx/4a5e1e4baab89f3a32518a88c31bc87f618f76673e2cc77ab2127b7afdeda33b

BTC未花費交易模型是什麼樣的?如何調用UTXO API

普通交易-輸入與輸出

一個UTXO 創建後就不可分割,只能將其花掉,而花掉UTXO 又會產生新的UTXO, 這樣子周而復始地實現比特幣價值的轉移。

BTC未花費交易模型是什麼樣的?如何調用UTXO API

如上圖,Transaction 1 就是一個UTXO,輸入了5個BTC,輸出了4個和1個BTC;Transaction 2是另外一個UTXO,輸入了3個BTC,輸出了0.5個BTC和2.4個BTC;Transaction 3 的UTXO的輸入是來自Transaction 1 和Transaction 2 的輸出共1.5個BTC。

UTXO模型原理就是每一筆UTXO 的輸入都來自上一筆UTXO 的輸出,直到coinbase 交易為止,也就是只有輸出沒有輸入。

比特幣網絡轉賬UTXO的變化

假設Alice 給Bob 轉賬,則轉賬可分為三個階段:

  • 假設Alice 之前通過挖礦獲得了6.25 個比特幣,那麼在她的地址中,這6.25 個比特幣是某個coinbase 交易的UTXO。
  • Alice 發起一筆交易,輸入是自己的上一筆交易,輸出是Bob 的地址,數量為6.25 BTC,不考慮礦工手續費。 Alice 對該交易用自己的私鑰進行簽名。
  • 當交易被全網確認後,Alice 的UTXO 就變成了0。而Bob 的地址則新增了一個UTXO,來自Alice 且包含6.25 BTC。
BTC未花費交易模型是什麼樣的?如何調用UTXO API

例如Tokenview 比特幣區塊瀏覽器查看到的一筆交易:

https://btc.tokenview.com/cn/address/3LQUu4v9z6KNch71j7kbj8GPeAGUo1FW6a

該地址的“餘額”是37,926.9774891 BTC,表示該地址的UTXO,未花費交易輸出為37,926.9774891 BTC。

BTC未花費交易模型是什麼樣的?如何調用UTXO API

UTXO模型基本原則和作用

所有比特幣都必須來源於前面某一個或者幾個交易的UTXO,除非是爆塊獎勵的比特幣。任何一筆交易的輸入比特幣之和必須等於輸出比特幣之和(礦工費視為包含在輸出裡的話)。可以看成“等式兩邊必須配平”。

UTXO模型是為了防止雙花,就是雙重花費數字資產。 UTXO模型原理下,雙花發生概率很低而且極易被全網驗證時所發現並剔除。每一筆輸入同時也需要上一筆輸出所對應的私鑰進行簽名,而且每個礦工都存儲著比特幣網絡所有UTXO 的信息,全網礦工通過UTXO 規則及簽名算法就可以驗證新交易的合法性。

Tokenview未花費交易API

比特幣區塊鍊和其分叉鏈都是使用的UTXO交易模型,除了在BTC區塊瀏覽器查詢交易信息外,在哪裡可以獲取未花費交易數據呢? Tokenview 未花費API (https://services.tokenview.com) 就可以獲取相關交易數據,並支持多條鏈包括:BTC, BCH, BCHSV, DASH, LTC, DOGE, RVN, PIVX, NMC, RDD, XZC , NRG, SYS, NEBL, VTC, VITAE, GIN, HC, CRW, GAME, PART, EMC, UNO, XSN, WGR, EMC2, BCI, BLK, CLAM, XVG, LUX, SMART, DCR, BAY, FLO, NAV , STRAT, XMY, BCA, MONA, DGB,LCC。

Tokenview 未花費交易API接口:

https://services.tokenview.com/vipapi/unspent/btc/1DfDKUMzSxJD8dontsxTvXVUUBZrQ24ZfA/1/50?apikey=R8UNuoal7yGtw32PlksD

BTC未花費交易模型是什麼樣的?如何調用UTXO API

未花費交易接口字段含義:

  • 'block_no': 658084,此未花費交易所在的區塊高度是658084;
  • 'output_no': 4, 此UTXO 的第4個輸出(從0開始);
  • 'index': '201', 此筆交易在該區塊裡的位置是第201筆(從0開始);
  • 'txid':'de44f8aece76d48ba72ddb3710f44a29e8239c4bed20bf2a36e6d3adaed0adb2', 此未花費交易的交易哈希;
  • 'hex': '76a9148adb995199ef0d0f5e90e8514030e135b944cbaa88ac', 輸出地址的16進制格式;
  • 'confirmations': 17051, 此未花費交易的確認數是17051;
  • 'value': '71.95205342' 此UTXO 第4個輸出的總金額為71.95205342 BTC。
BTC未花費交易模型是什麼樣的?如何調用UTXO API