Blockstack 概述
Blockstack 是一個開源的、開發者友好的生態平臺,支援開發者基於它開發去中心化應用和智慧合約。Blockstack 生態由多個系統組成,共同為開發者提供構建去中心化應用所需的元件:
區塊鏈層。Stacks 區塊鏈(https://github.com/blockstack/stacks-blockchain)是 Blockstack 生態的基礎,它透過共識機制 PoX(Proof of Transfer,轉移證明)繼承了比特幣網路的安全性,同時提供了智慧合約語言 Clarity,開發者可以使用它編寫安全的智慧合約。
去中心化儲存。Blockstack Gaia 儲存系統(https://github.com/blockstack/gaia)主要儲存使用者的應用程式資料,無需引入中心化信任方,可以為使用者提供高效能和高可用性的資料讀寫。
去中心化賬戶。Blockstack Connect 是一個 JS 庫(https://github.com/blockstack/ux/tree/master/packages/connect),用於將 Blockstack 身份驗證和智慧合約整合到應用程式中。
開發者工具。包括開發者程式庫和工具包,比如:生成 Stacks 交易的 JS 庫(https://github.com/blockstack/stacks-transactions-js)等。
4月24日啟動的 Stacks 2.0 公開測試網(https://www.blockstack.org/testnet)共分為四個階段,目前處於第二階段 Argon 和第三階段 Krypton 之間,使用者可參與 Stacks Mining 以及 Clarity 智慧合約開發,進行 PoX Stacking 操作需等到第三階段。
PoX 介紹
2020年初,Blockstack 提出 Stacks 區塊鏈共識機制的 2.0 版本(提案 SIP-007),在燃燒證明 PoB (Proof of Burn)的基礎上使用傳輸證明 PoX (Proof of Transfer)。
Blockstack 原有 PoB 共識(提案 SIP-001)選擇燃燒比特幣(即傳送比特幣到特定的廢棄地址)獲取 Blockstack 原生代幣 STX 的出塊概率。PoB 的缺點在於對比特幣社羣的傷害,燃燒的比特幣相當於永久銷燬。
PoX 在 PoB 的基礎上,將燃燒的比特幣以一定比例返還給持幣使用者,返還的方式是直接透過比特幣交易分配給每個滿足條件的持幣使用者。
PoX 流程
PoX 中有兩種角色:
Stacker - 在 Stacks 區塊鏈上傳送簽名訊息參與 Stacking 共識中的交易驗證,從而獲得參與獎勵 BTC。
Miner - 在 Stacks 區塊鏈上傳送比特幣交易參與 Stacking 共識中的競爭出塊,從而獲得挖礦獎勵 STX。
Stacks 區塊鏈的 PoX 流程中有兩個重要的角色:Stacker 和 Miner。Stacker 透過臨時鎖定 STX 來獲取比特幣,Miner 則透過轉移比特幣來獲取 STX。
- Stacker
具備一定閾值以上數量的 STX 持有者,可以傳送一個簽名訊息,將其持有的 STX 鎖定一個獎勵週期,並指定一個比特幣地址來收取參與獎勵,同時投票選擇一個 Stacks Chain 的當前分支。
要成為 Stacker 需要 STX 持有者滿足以下兩個條件:
具備一定閾值以上數量的 STX 。
可以傳送一個簽名訊息,將其持有的 STX 鎖定一定週期,並指定一個比特幣地址來收取參與獎勵,同時投票選擇一個 Stacks Chain 的當前分支。
- Miner
Miner 透過“燃燒”比特幣競爭成為 Leader 獲取出塊權,PoX 協議使用可驗證的隨機函式(VRF)按 Miner 傳送的比特幣數量加權排序,選擇一個獲勝礦工作為 Leader,由它產生新的區塊,併發放獎勵。Leader 選舉是透過比特幣區塊大約每10分鐘進行一次。以下為執行 Miner 節點的日誌:
./target/release/stacks-node start --config=./testnet/stacks-node/conf/neon-miner-conf.toml
==> ./testnet/stacks-node/conf/neon-miner-conf.toml
INFO [1589252363.341] [src/chainstate/stacks/index/marf.rs:764] First-ever block 0f9188f13cb7b2c71f2a335e3a4fc328bf5beb436012afca590b1a11466e2206
INFO [1589252421.526] [src/burnchains/burnchain.rs:842] Node will fetch burnchain blocks 0-1822...
INFO [1589253317.540] [testnet/stacks-node/src/run_loop/neon.rs:50] Configured as a miner: checking if we have UTXOs at address: mnjQP5D5AtuyrsE1wbGvueyQFey24ginXn
INFO [1589253324.729] [testnet/stacks-node/src/run_loop/neon.rs:58] Have UTXOs, starting up as miner
INFO [1589253324.757] [src/chainstate/stacks/index/marf.rs:764] First-ever block 8aeecfa0b9f2ac7818863b1362241e4f32d06b100ae9d1c0fbcc4ed61b91b17a
INFO [1589253324.775] [src/chainstate/stacks/db/accounts.rs:179] STB44HYPYAT2BB2QE513NSP81HTMYWBJP02HPGK6 credited: 10000000000000000 uSTX
轉換日誌中的時間戳可以看出節點在2020-05-12 11:00:21啟動,並在 2020-05-12 11:15:17 成為 Miner。
在 PoX 流程中,不同的節點對獎勵集取得一致共識是困難的,會面臨分叉 fork 和丟失區塊資料等問題,如何在節點間取得共識?Stacks的解決方法是 將共識分為兩個階段,即準備階段(prepare)和獎勵階段(reward)。
準備階段是指一個在獎勵階段之前的視窗期 w ,比如 240 個比特幣區塊,在此階段主要確定以下兩項:
錨定區塊(Anchor)。這是 Stacks 鏈的區塊,Miner 和 Stacker 均參與錨定區塊的選擇。在該階段 Stacks 節點(Miner)確定某個區塊是否達到 F * w 個區塊確認,同時 Stacker 會廣播發出由其簽名的對錨定區塊支援的訊息,在視窗期 w 結束時,Stacks 節點將找到潛在的錨定區塊。
獎勵集。獎勵階段結束獎勵的比特幣地址集,透過 Stacks 鏈的狀態而確定。
獎勵階段,Miner 透過廣播區塊提交,將比特幣提交傳送至有效地址來競爭獲取獎勵。有效地址由兩條規則決定:
如果 Miner 未從任何錨定區塊的鏈上構建,則將提交的比特幣傳送到燃燒地址;
否則將 Miner 提交的比特幣傳送到從獎勵集中使用 VRF 隨機選擇的 5 個地址。
如缺少錨定區塊資料,則 Stacks 節點將獎勵階段視為未選擇錨定區塊(比如回退到燃燒證明 PoB)。
參與 Stacking
在 PoX 中,Stacking 是指 STX 持有者透過臨時鎖定其 STX 賺取 BTC 作為參與獎勵的過程。Stacking 是使用已有區塊鏈的 PoW 加密貨幣保護新區塊鏈的機制。其經濟利益是,新加密貨幣的持有者可以透過積極參與 Stacking 來獲得基礎加密貨幣獎勵。在目前提案中,基礎加密貨幣是比特幣。
- Miner 門檻
基於當前的瞭解,成為 Miner 需要:
持有 BTC
執行 Miner 節點
之後可能會有一個單獨的 Miner CLI 程式(參見 Github issue 1441),它將與 STX 節點協作,執行以下 Mining 操作:
Mining 前,Miner 透過比特幣交易在比特幣區塊中註冊其 VRF 金鑰;
收集交易並將其打包進區塊中;
生成一筆區塊提交交易包括 VRF 金鑰和區塊雜湊;
廣播該區塊;
生成並廣播要附加到其區塊的 micro 區塊(可選)。
- Stacker 門檻
在目前的提案中,參與 Stacking 所需的 STX 的數量門檻與全網參與 Stacking 的總量掛鉤,也就是說 Stacker 門檻是根據參與度動態調整的。PoX 礦工都會將比特幣傳送至一組滿足以下條件的持幣者:
持有的 STX 大於或等於流通總量的 0.02%,用來確保每個獎勵週期都足以覆蓋所有參與者。以25%為劃分為兩類參與度:
- 小於25%,最小參與門檻為1/20000 * 流通量。
- 介於25%~100%之間,最小參與門檻為1/5000 * 流通量。以流通量 648,439,298 STX 和 100% 參與率計算,門檻是持有 129687 STX。
在獎勵週期開始之前,廣播簽名訊息。
Stacking 收益
PoX 中有兩類角色,即有兩種方式參與 Stacking 獲得收益。
關於礦工 Miner 的收益,協議為提升 Miner 的參與度,設計了自適應的挖礦和燃燒機制,這樣每個區塊的獎勵是動態。目前的提案是:前5年,區塊獎勵為 500 STX/Block,接下來的5年,區塊獎勵為 400 STX/Block,剩餘時間,區塊獎勵為 300 STX/Block。
作為持幣使用者 Stacker,每個獎勵週期每個“合格”的 Stacker 都會得到獎勵,如參與 Stacking 的“使用者”(獎勵地址)較少,那麼每個“使用者”獲得的收益相應地會較多。
具體的收益計算涉及到一些概念和因素:
Reward Set / Reward Address,獎勵集/獎勵地址,一個週期內5個地址將獲得 PoX 獎勵;
Reward Cycle,獎勵週期,一個週期為1000個區塊;
當前 STX 的流通總量;
以及礦工轉移 BTC 出塊獲得 STX 對應的實際價值。
舉個例子,假設 STX 代幣按照當前交易所價格穩定為 $0.2,且假設參與 Stacking 的獎勵地址有4000個,且假設當前網路中礦工燃燒的比特幣為100個。那麼根據當前 STX 流動量(https://explorer.blockstack.org/),按 Stacker 的最低參與門檻鎖定50,000個 STX 計算,Stacker 每月獲得的 BTC 對應的美元價值約為$294。
可透過這個應用來進行預估:
https://stackulator.netlify.app/
如何阻止 Miner 聯盟
由於 Stacking 獎勵可能產生礦工聯盟,SIP-007 中提到一種有時間限制(Time-Bounded)的 PoX 方案,在主網啟動 x 年後,PoX 將轉為 PoB。
初始階段,10萬個區塊大約2年。使用上述提到的 Stacks 獎勵。
過渡階段,40萬個區塊大約8年,每個獎勵週期的獎勵和燃燒率比例線性降低0.25%(100/400)。
參考資料
Blockstack 技術白皮書 v2.0:https://blockstack.org/whitepaper-ch.pdf
Token 白皮書 v2.0:https://blockstack.org/tokenpaper.pdf
PoX 白皮書 v0.2:https://blockstack.org/pox.pdf
SIP-001 Burn 選舉提案:https://github.com/blockstack/stacks-blockchain/blob/develop/sip/sip-001-burn-election.md
SIP-007 Stacking 共識提案:https://github.com/blockstack/stacks-blockchain/blob/develop/sip/sip-007-stacking-consensus.md
Blockstack 路線圖:https://www.blockstack.org/p/roadmap
Stacks 2.0 測試網網站:https://testnet.blockstack.org/
Stacking:https://forum.blockstack.org/t/stacking-a-new-consensus-algorithm-for-blockchains/10162
PoX:https://forum.blockstack.org/t/proof-of-transfer-pox-whitepaper/10315/16
獎勵地址:https://forum.blockstack.org/t/stacking-protocol-adjusting-reward-threshold-based-on-participation/10649
Stacks 2.0 testnet updates:https://forum.blockstack.org/t/stacks-2-0-testnet-launch-update/10683
礦工的 CLI 程式:https://github.com/blockstack/stacks-blockchain/issues/1441
PoX AMA:https://mp.weixin.qq.com/s/NtFBtolLjYMyeia8G1_ZOA