带你了解Blockstack 提出的 PoX 共识
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)。
微信扫描关注公众号,及时掌握新动向
2.本文版权归属原作所有,仅代表作者本人观点,不代表比特范的观点或立场
2.本文版权归属原作所有,仅代表作者本人观点,不代表比特范的观点或立场