UTXO的作用——通往 Qtum 離線Staking之路(一)

買賣虛擬貨幣
今年,Qtum量子鏈的開發者們的工作中重要的一部分是實現量子鏈離線Staking功能。離線Staking是什麼?將有哪些使用場景?本系列將從設計、測試、部署等角度陸續為你揭曉量子鏈離線Staking的方方面面。量子鏈離線Staking的頂層設計還在不斷完善之中,而作為系列的第一篇,本文將首先為你剖析UTXO在量子鏈現行的線上Staking中是怎麼工作的。等離線Staking的設計完成,我們將進一步展示UTXO在量子鏈離線Staking中的重要性。畢竟說到Qtum量子鏈的PoS,最重要的就是UTXO。摘要UTXO(未花費輸出)是Qtum量子鏈的基礎價值單位,並且在Qtum PoS的Staking中起到重要作用,因此有很多相關操作。大的Stake會被分成兩個UTXO,小的Stake可以匯聚成多個UTXO。我們在文中回顧了現行的線上Staking中使用UTXO的方式,這也是將來離線Staking的基礎。簡介UTXO你可能已經瞭解Qtum量子鏈在傳送“幣”的時候使用了比特幣的UTXO(未花費輸出)模型。透過使用UTXO模型,QTUM的價值就是一個或多個儲存在區塊鏈上的之前發生的轉賬。未花費的轉賬在新的轉賬中可以作為“輸入”被髮送出去,而同筆轉賬中的接收地址就會收到一個或多個“輸出”。這就是“未花費輸出”名字的由來。

為了更好地理解UTXO在錢包中是怎麼工作的,我們用下圖中的例子展示了一個錢包如何管理兩個地址中的6個UTXO(共300QTUM)。因為這些UTXO是“成熟”UTXO(經過了500個以上的區塊確認),所以它們能在這個錢包裡被用來Staking。這些UTXO以轉賬的形式儲存在區塊鏈上(而不是錢包裡)。這個錢包存著這兩個地址的私鑰,所以它“擁有”這些UTXO,可以把它們傳送出去或者去Stake(而任何其他沒有這些地址私鑰的錢包不能操作這些地址的UTXO)。

“我的UTXO”按鈕只存在在以上PS的錢包圖片中,實際錢包中在“轉賬”頁面會顯示該錢包所有轉賬的細節。

UTXO是怎麼被選中進行Stake的?

PoS共識演算法會對每個被Stake的成熟UTXO進行單獨計算。如果某個UTXO提供了一個kernel solution(SHA256雜湊值小於“目標值”,可以取得出塊權),該UTXO就有權Stake下一個區塊。當然,這個過程中還有很多細節【1】。找到kernel solution的概率也會根據UTXO的大小調整權重,更大的UTXO將能更頻繁地找到kernel solution。所有的成熟UTXO之和將作為“錢包權重”,這將決定一個錢包獲得區塊獎勵的概率。

Staked UTXOs

當一個UTXO被選為kernel solution之後,下一步是去區塊鏈上進行Stake。每個區塊中的第二個轉賬是Coinstake轉賬,在這個轉賬中將確認Stake並支付區塊獎勵。錢包將給自己傳送Stake轉賬,這會將Stake鎖定,直到經過500個區塊確認(也就是說著將鎖定Stake大約18小時)。下圖展示的是一個簡單的Coinstake轉賬:

Coinstake轉賬背後發生了什麼?

一個有300QTUM的UTXO被選為kernel solution(PoS共識演算法的正確結果)來Stake下個區塊。因此300QTUM的基礎上會再加上4.0個QTUM作為新鑄造的區塊獎勵。任何大於或等於200QTUM的Coinstake輸入都會被自動分成兩個UTXO,每一半都會收到0.4QTUM起始區塊獎勵的一半,因此有兩個150.2QTUM的輸出。同時還有9個0.4QTUM的輸出被髮送給之前的區塊獎勵獲得者。

錢包將Stake輸出傳送給自己(在這個例子中是兩個150.2QTUM的輸出),這些幣將Stake 500個區塊確認的時間,然後些幣就可以被髮送給別人或者等成熟後繼續Stake。Coinstake轉賬不需要支付轉賬費或Gas。而且,上圖中沒有顯示的是,Coinstake轉賬會收集轉賬費和Gas,分成十份傳送出去給當前和之前的區塊獎勵獲得者,這就是Qtum Mutualized PoS中Mutualized(互助)的部分。

Stake中的UTXO重新組合

生成Stake的另一個特點是錢包總是會將小額的UTXO重組,來清理小額UTXO。下圖表示一個有150QTUM的UTXO的kernel solution,隨後將9個0.4QTUM區塊獎勵組合了起來。這個Coinstake轉賬有10個輸入和9個輸出。因為Stake小於200QTUM,所以沒有被分割,最後的Stake將是一開始的150QTUM加上9個0.4QTUM的重組,再加上0.4QTUM的初始區塊獎勵,總共是154QTUM。

在區塊500847發生了一個極端的例子,一個只有0.4QTUM的UTXO給出了kernel solution,然後跟其他99個0.4QTUM的獎勵組合了起來,生成了一個Stake。

建立Stake

建立Stake過程中,分割和重組UTXO的規則會遵照下面這個流程圖中的過程。大於200QTUM的UTXO將被平分,錢包將重新組合UTXO以達到100QTUM。當然,最後的Stake取決於錢包中可用的UTXO。

建OG錢包的UTXO大小

我們可以看看一些OG(Original Gangster)Staking錢包上個月最大的8位Staker的UTXO大小。這些錢包已經持續Stake了至少一年半,他們的Stake的UTXO不斷透過以上規則進行分裂和重組。我們從qtum.info的API中獲取了這些資訊:

平均UTXO大小是取了大於0.5QTUM的UTXO(不包括那些0.4QTUM的區塊獎勵)。上表顯示這些OG Staker們在逐漸向大約150-180QTUM的Staking UTXO進行轉變。

重新組合演算法隨著v0.18.0的釋出而被執行得更多。我們現在能看到許多重新組合是9的倍數,因為一個典型的Stake UTXO能夠由核心的UTXO加上9個0.4QTUM區塊獎勵組成。

我們也可以觀察真實的Stake大小。透過使用Python指令碼抓取二月過去兩週的區塊鏈資料(區塊高度543792-553241),有9450個區塊的Stake範圍在4至100002.4Qtum之間。46.3%的Stake在小於200QTUM的範圍內(所以不會被分割)。具體的Stake大小分佈如下(這裡選取了0-1000QTUM的Stake,以50QTUM為單位間隔):

這個圖要怎麼看?在統計的時間段內,大小在100至150QTUM(灰色)之間的Stake佔總Stake數量的26.6%,大小在150至200QTUM(黃色)之間的Stake佔總Stake數量的16.7%,以此類推。100-200QTUM之間的兩類清晰地顯示了200QTUM以上的Stake會被錢包分割開,以及UTXO重新組合的現象。

在統計的兩週內,有五個0.4QTUM的UTXO以及一個2QTUM的UTXO(錢包總權重為6QTUM)提供過kernel solution。這些小型Staker很幸運,但也很少見,因為理論上他們的等待時間可以長達數十年。

設定你的UTXO大小——sendmanywithdupes

為了效果最優,Staking錢包應該預先將它們的UTXO分割成100-150QTUM的大小。為了將大的UTXO分割成Staking的理想大小,可以使用sendmanywithdupes命令。一個好的方式是每個轉賬傳送100個UTXO,這樣能夠最容易地傳送到一個新的Staking地址。可以像【2】中一樣,使用任意文書處理器將其中的佔位符替換成您的Staking地址。

結論

UTXO是Staking操作的關鍵,在作為Stake使用時,UTXO遵循嚴格的分割與重組演算法。當Qtum的委託Staking方案公佈後,我們將重新考慮UTXO在新設計中的影響。

參考文獻

1. An Introduction to Qtum Proof-of-Stake Mining — A Racing Story https://medium.com/@jb395official/an-introduction-to-qtum-proof-of-stake-mining-a-racing-story-f11a3f48009f

2. sendmanywithdupes

這個命令允許向一個地址傳送多個轉賬,是理想的將大UTXO分割成適合Staking的工具。下面的命令將產生10個新UTXO。您可以按照這個模式擴充套件到最多100個UTXO,並使用“全部替換”來輸入您的Staking地址。

sendmanywithdupes “” “{

\”Q_My_Address\”:100,\”Q_My_Address\”:100,\”Q_My_Address\”:100,\”Q_My_Address\”:100,\”Q_My_Address\”:100,\”Q_My_Address\”:100,\”Q_My_Address\”:100,\”Q_My_Address\”:100,\”Q_My_Address\”:100,\”Q_My_Address\”:100}”

免責聲明:

  1. 本文版權歸原作者所有,僅代表作者本人觀點,不代表鏈報觀點或立場。
  2. 如發現文章、圖片等侵權行爲,侵權責任將由作者本人承擔。
  3. 鏈報僅提供相關項目信息,不構成任何投資建議

推荐阅读

;