Qtum改進提案(QIP)是社羣對Qtum量子鏈的新特性和新功能的提案,存放在GitHub上的一個程式碼倉庫中。QIP的內容包括但不限於使用者介面的改進、技術引數的改變、新命令、新操作碼等等。QIP-25的是關於從離線地址進行Staking的提案,詳細描述了Qtum量子鏈離線Staking的動機、技術設計等內容。值得注意的是,QIP-25中包括一些與開發者的設計討論和一些對於離線Staking的額外建議,這些內容可能不會在上線時完全實現。離線Staking是Qtum社羣呼聲最高的改進之一。實現離線Staking將需要區塊/轉賬協議和共識機制的改變,也就意味著需要區塊鏈硬分叉才能實現。下文是QIP-25的詳細內容,原文也在GitHub相應位置【1】貼出。QIP-25 離線StakingQIP: 25層級:區塊鏈協議主題:離線Staking作者:Jackson Belove郵箱:admin@chaindaily提議修改區塊和轉賬協議以提供離線Staking功能。該功能將允許錢包地址透過智慧合約將UTXO委託給能為該地址進行Stake的線上節點。接受委託的線上節點將收取一定費用。評論連結: https://github.com/qtumproject/qips/issues/25狀態:草稿建立時間:2020-03-19許可:GPLv3摘要本QIP描述了一種區塊鏈協議改進和智慧合約實施方式,該改進將允許離線地址委託提供Staking服務的線上節點進行Stake。自從上線開始,Qtum量子鏈的PoS共識機制只允許能安全地為區塊鏈提供服務的線上節點進行Staking。QIP-25的改進將允許離線錢包裡的地址將它們的UTXO安全地委託給線上節點,接受委託的線上節點將會使用離線節點委託的UTXO進行PoS共識過程。地址的委託將透過一個只能合約進行。新的區塊頭和轉賬協議將提供驗證委託的方法,並支援實時地給線上節點支付費用。Qtum的核心節點和輕節點將可以透過呼叫智慧合約輕鬆地進行委託和解除委託。委託將以非託管的形式進行,離線地址的所有者將保持自己對私鑰的控制權,被委託的UTXO將不會被鎖定。動機Qtum社羣呼聲最高的一個需求就是離線Staking。自從上線以來,Qtum主網的線上Staking機制需要Staker維持Qtum核心錢包線上作為全節點。這些Staking的錢包同步整個Qtum區塊鏈,必須7*24小時地線上,維護網路的安全執行,成為合格的區塊生成者,才有可能取得獎勵。那些不想執行全節點的QTUM持有者,或者處於安全考慮無法執行全節點的人,就無法參與Staking。社羣成員的第二個擔心在於執行全節點進行Staking的資源與能源成本。安全形度最好的Stake方式是使用一臺專用計算機,不適用這臺計算機進行上網、收發郵件等別的操作,以免惡意軟體的危害。但這就牽涉到資源利用的問題,尤其對於持有QTUM數量不多的持有者來說,保持電腦7*24小時執行在經濟上可能並不划算。雖然7*24小時執行一個Qtum全節點並不困難,但這也確實需要佔用一些資源,即使在雲上執行也是如此。而且這也需要消耗一定的運維成本,來應對節點升級、硬分叉、作業系統升級等等問題。名詞解釋Staking service:是指一個節點提供的接受別的地址委託,為那些地址進行Stake的服務,並因此收取一定的費用。Solo Staker:是指傳統形式線上的、使用其UTXO進行Stake的Qtum全節點錢包。Staking Service Fee:指因提供Staking服務而收取的費用。該費用由委託者設定,範圍在0-100%之間。Super Staker:指以為委託地址提供Staking服務執行的Qtum核心錢包節點。離線Staking:委託者能夠將UTXO從一個離線錢包地址委託給一個線上的Super Staker節點的功能。離線Staking離線Staking的上層設計目標有以下幾點:· 非託管的Staking方案。使用者保持對其私鑰的獨家控制權;· 被委託地址的UTXO不被鎖定,能夠隨時被髮送出去或改為Solo Stake模式;· 被委託的UTXO遵循500個區塊成熟期的Staking週期模式;· 使用者可以設定給Staking Service的提供者的費用,相應的服務提供者能夠收取費用;· 修改Coinstake協議,便於即時地使用區塊獎勵支付費用;· Staking Service提供者必須線上,並且進行Stake以避免”nothing at stake“攻擊;· 開發多客戶端的方案,提供方便的委託與解除委託功能。因為離線Staking會將一個地址要Stake的UTXO集委託給另一個線上節點,區塊獎勵的”預計時間“將基本與現在的方式相同(會有一些細節的改變)。委託Staking不是Staking礦池。Coinstake VoutsCoinstake是每個區塊的第二筆轉賬,包含Stake的UTXO和區塊獎勵。區塊獎勵包括兩部分:1. 新生成的QTUM(現在是每個區塊4.0QTUM);2. 該區塊內的轉賬費和Gas。對於離線Staking,區塊獎勵的支付方式如下:· 委託地址收到:100% - StakingServiceFee;· Super Staker地址收到:StakingServiceFee。對於離線Staking,Coinstake轉賬協議的修改可以用以下例子表示。例子中,Alice將她的離線地址委託給提供離線Staking服務的Bob。”變化?“一列表示與現行協議相比有所變化。
下面給一個更具體的例子。假設Alice是一個離線Staking服務的使用者,她選擇支付20%的委託費給Staking服務提供者Bob。同時,另一個離線Staking使用者Carol懸著支付15%的委託費給Staking服務提供者David。他們區塊獎勵中的轉賬費和Gas為0.1QTUM。因此每個區塊總的區塊獎勵是4.1QTUM。這個情境下,Coinstake的Vout將如下表:
Alice的區塊獎勵:
注意:
Coinstake轉賬本身無需支付費用,如果委託費設定為0或100%,將只有一個Vout(為零的Vout將不被髮送)。以上例子僅供解釋用途。Qtum目前使用的MPoS會將部分割槽塊獎勵放在500區塊之後傳送。
新RPC命令
Super Staker節點執行過程中需要發出遠端過程呼叫(RPC)。這些命令可以透過RPC呼叫、Qtum-Qt GUI錢包控制檯等方式發出,也可以由qtumd deamon伺服器錢包透過qtum-cli命令號介面傳送。為了Qtum核心錢包能夠管理離線Staking,將會新增如下的新命令:
新命令列引數
Super Staker登入時會讀取命令列引數。這些命令會在命令列中列出,比如登入qtumd deamon伺服器錢包:./qtumd -parameter1 -parameter2=nn -parameter3=nn 將會新增以下命令列引數:
Super Staker的節點操作
Super Staker是一個設定為能夠Stake委託地址的UTXO的Qtum核心錢包(全節點)。設定與新命令將提供以下操作:
· 使用新命令getdelegationsforstaker取得委託地址列表;
· 使用新命令getaddressutxos取得該地址委託的UTXO列表;
· 根據新命令stakingminutxovalue或stakingminfee將列表內的UTXO排序並選取最小的UTXO或委託費最低的UTXO;
· 執行Qtum的PoS演算法以生成kernel solution並提交區塊;
· 當發現一個kernel solution時,驗證現有的委託,並生成有支付費用的Coinstake新區塊;
· 提交新區塊並提交一個Super Staker擁有的UTXO Stake。
錢包客戶端操作
客戶端是操作生成委託的錢包。客戶端必須提供簡單明瞭的方式讓使用者將UTXO委託給提供Staking服務的UTXO。
下面是一個離線Staking的示例頁面:
客戶端的離線Staking委託功能將需要智慧合約呼叫。目前Qtum錢包提供了這類功能。Qtum核心錢包將首先提供離線Staking功能,Qtum網頁錢包和安卓移動端錢包也將陸續推出該功能。整合了智慧合約呼叫功能的第三方錢包也將可以提供這項功能。
Qtum網頁錢包目前提供了”從Ledger恢復“的選項,當頁面升級為能提供簡化離線Staking功能的版本後,將允許使用者從Ledger硬體錢包地址進行離線Staking委託。
委託智慧合約
將由一個智慧合約來管理委託事務。主要功能包括新增、更新委託資訊,刪除委託,取得特定地址的委託等。
該智慧合約將維護一張委託資訊表,記錄內容包括委託使用者地址、被委託Super Staker地址、委託費、委託區塊高度等。具體例子如下:
相容性
因為離線Staking需要更改區塊與轉賬協議,因此節點與客戶端將無法向後相容,實施時將需要進行硬分叉。在部署新節點和客戶端之前可能需要執行一個單獨的測試網,該測試網將遵循Qtum Core v0.18.1硬分叉的模式,即先啟動測試網,後啟動主網。
暫時不會實現的功能
離線Staking的上線版本將是一個最小可用版本,注重安全性與簡潔度。待離線Staking在社羣建議下更加成熟之後,可以再陸續新增一些額外功能。
以下功能並不列為目標,不會在初始版本中實現:
1. 從多籤地址委託;
2. 從SegWit地址委託(不支援p2sh-segwit或bech32地址,僅支援”Q”開頭的地址);
3. Staking服務節點Stake自己的UTXO;
4. Staking服務節點重組小的UTXO;
5. 為委託地址重組小的UTXO(必須手動處理)。
致謝
感謝Qtum開發團隊設計並稽覈了Qtum離線Staking,尤其感謝Neil Mahi的原型設計。
參考文獻
QIP-25 https://github.com/qtumproject/qips/issues/25
開發者指南 http://book.qtum.site/en/
Qtum文件 https://docs.qtum.site/en/
Qtum核心協議程式碼 https://github.com/qtumproject/qtum
著作權
Qtum及本QIP使用GNU通用公共授權第三版。