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