成都程式員zhangweis發表了一篇短文(Merkle tree proof based data storage)提出一種使用位元幣智能合約來驗證資料狀態變化的方法,sCrypt做了總結,題目是BSV智能合約中可擴展的狀態存盤(Scalable State Storage in BSV Smart Contracts),
這種技術可以用于制作基于狀態變化的Token,以及預言機(Oracle),資料狀態的正確性由位元幣網路做驗證,
之前 sCrypt有提出基于UTXO的Token方案
在這個UTP方案中,資料是保存在每一個UTXO中的,狀態的變化就是UTXO被花費,進而生成新UTXO的程序,新資料保存在新的UTXO之中,

zhangweis的新方案同UTP完全不同,其對狀態和資料進行分離,資料在鏈下(或者在鏈上)單獨保存,而UTXO只進行狀態變化的驗證,并且保存最新的狀態,注意:UTXO中只保存狀態,而不保存資料,
示意圖如下

右側是一個默克爾樹,樹葉是不同用戶的資料,比如包含用戶的公鑰和余額,
左側是一連串的UTXO,一個Utxo花費之后會生成一個新的Utxo,這個程序就像接力棒(Baton)一樣,新的UTXO輸出里保存了右側資料的最新狀態,即右側資料的默克爾樹根,
在進行Token發行(issue),轉賬(transfer),銷毀(burn)等操作時,首先由錢包修改右側的資料,再解鎖Utxo,將操作的程序作為解鎖引數,生成新的Utxo,
比如創世交易首次發行,創建了一棵空的狀態樹(默克爾樹),然后添加了第一個葉子1A,發行100個Token給小李,經過多次發行之后有8個用戶的時候,狀態樹(默克爾樹)將分三層,葉子從3A到3H保存8位用戶的資料,持有不同數量的Token,這時3A的位置是小李的賬號,
假如3A小李給3C的小王轉30Token
3A Balance - 30
3C Balance + 30
橙色背景的葉子是資料修改部分,綠色背景的葉子和節點沒有變化,藍色節點是受到影響而改變的節點,將有顏色的資料和路徑,以及樹根作為UTXO解鎖引數,在解鎖程序中根據資料和路徑計算樹根是否正確,
如果正確無誤,解鎖成功,生成新的Baton UTXO,里面保存最新的樹根,
演示代碼見:https://gist.github.com/zhangweis/f651b7e12acaa7171ab087888e116dc6
可以做如下思考
1, 因為每個合約Baton UTXO只有一個,如果是各個錢包分散發起轉賬操作,那么并發性會存在問題,
解決辦法:由合約服務器負責統一組裝協調,類似BIP270,由錢包發起轉賬請求,交易片段發給服務器,服務器排隊多個請求,順序發送,
2,潛在的攻擊者可以偽造Baton UTXO,復制完全一樣Baton UTXO或者修改其保存的Root狀態,
解決辦法:sCrypt提出的防止攻擊的方案, 是一個導致解鎖交易膨脹的方案,理論可行,再就是由第二層的錢包作出獨立驗證,因為只有一個單線的UTXO,非常容易識別偽造,
3,預言機(Oracle),右側資料不僅僅是Token,還可以是離線的任何資料,只要事先制定好規則,就可以對預言機的資料做鏈上驗證,
4,資料可以在鏈下也可以在鏈上保存,適合使用metanet協議保存資料,因為metanet將所有歷史記錄,資料的各個狀態均保存,
總之,這種技識訓于Baton UTXO和默克爾樹的技術為Bitcoin SV上的代幣Token和預言機Oracle帶來新的重要的技術方案,
享受位元幣帶來的安全自由, 關注使用NoteSV
轉載請註明出處,本文鏈接:https://www.uj5u.com/qianduan/145538.html
標籤:其他
上一篇:6.Fabric區塊瀏覽器的部署
下一篇:C#視頻——基礎篇
