《读懂区块链PoS共识》第六章 PoS中的矿工

矿工(miner),俗称挖矿的人,这个名字起的非常有暗示性。人类有很多贵重金属都是从地底下挖出来的,其中黄金还成为过人类共同认同的货币,挖黄金的人统称为矿工,这个概念沿用到了比特币里,但比特币里面的矿工挖的是比特币,所以中本聪是把矿工挖比特币比喻成了矿工挖黄金,实际上,比特币的确和黄金有着很多相似的设定,总量有限(2100万枚),越挖会越少;比特币也希望像黄金一样,成为人类共同认同的虚拟货币。
矿工这个角色在比特币时代里被广泛传播开来,后在区块链时代开始有多种版本的叫法,比如铸币人(Minter),锻造人(Forger),验证人(Validator),面包师(Baker),背书人(Endorser)等等,虽然称呼改变了,但是实际的角色职责并没发生太大变化。其改变可以理解为项目的差异化需求而已,以下我们统一称为矿工。
比特币10年,发展的越来越像黄金,美元不再和黄金挂钩后,黄金从货币的位置逐渐演变成出了储值的功能,而且在支付的道路上越走越远。而比特币,还没成为过支付,就已经开始走向了储值。这其中,矿工的角色扮演了非常重要的作用。
矿工挖比特币同挖黄金的目的一样,都是为了获得利益。但在不同的系统中,他们的职责可不一样。黄金里面的矿工,拿着锄头去洞里凿就可以了,而比特币的系统里面,矿工需要给系统提供计算力,同时还需要维护整个网路的稳定。黄金里,没有矿工挖掘仍然以物理的形式存在,而比特币没了矿工,就什么都不存在了。所以,矿工是去中心化网络里面必不可或缺的角色之一。
而随着区块链的发展,不同共识里面的矿工开始演化出新的权职。如PoW共识里面的矿工,如同比特币中矿工,矿工运行着系统编写好的软件,提供计算能力给系统,为系统工作,以此来获得奖励。PoS共识中的矿工,算力不再是最重要的需求,只需要一定的计算力,在合适的时间完成工作就可以获得奖励。
PoS的共识算法,对矿工的依赖同PoW相比,有过之而不及。除了创造新的区块外,POS中的矿工还会参与到Stake,验证,链上治理等中来,另外,和PoW矿工最大的不同点就是,PoS矿工不再需要一台高性能的矿机来和其他人竞争挖矿的权利了,与之对应的是,PoS矿工只需要运行一台足以满足系统最低配置的服务器,并且在系统被应用越广的时候,及时升级服务器配置,即可以完成PoS中对矿工的要求。
系统硬件要求降低,并不意味这PoS对矿工的要求降低。2016年到2019年发展的PoS项目里面,对于PoS矿工的软性要求越来越高。比如要求7×24小时在线,不能随意分叉系统,参与所有的治理,代表委托人的权益,提供足够多的工具,监控运行数据,即时升级最新版软件等等,更有项目要求运行团队为公司,以保证该矿工能符合要求。
所以我们会看到PoS矿工之间,经常有各种会,讨论升级,配置,参与讨论、治理和投票等。
资格
PoS项目中的矿工资格,最基本的标准是持币。然后在持币量的基础上,各个项目的要求都有不同,以下列举目前项目中的一些条件
· 持币量需要10000个,或者占总量0.1%
· Staking量在前100,包括自持有量和委托量
· 币被锁仓200000个,锁仓时间1个月/半年/1年
· 节点服务器配置最低要求
· 软实力,社区名望,技术实力,7×24小时维护
其中各个网络对于持币量是必选项。持币量达到一定门槛是为了从某种程度上实现性能提升,而锁仓是为了让没有Bond-Slash的系统达到一定的安全(不排除项目锁币的流动性),而委托量的要求则是为了让大量无法参与网络验证的持币人参与网络维护。软实力比较虚,主要体现在社区中的表现情况,给大家的第一印象吧。
满足以上资格,那么就可以进入下一步的节点配置了。
配置
一般系统对矿工的配置都不会很高,除非是运用拜占庭容错混合算法的项目或是趋向于联盟(Pemission)的项目。但是对于一个随意进入(Pemissionless)的区块链项目,一般的重点配置参数如下:
· 处理器(CPU)2核/4核
· 内存(Memory)4G
· 带宽(Bandwidth)5G bit
· 硬盘(Disk)200G及以上
其中,带宽要求要稍微高一点,因为一些区块链项目要求节点要长期在线,带宽高是为了和各个节点之间的通信保持正常。硬盘,是需要动态扩充的,随着区块数据的增多,出块节点需要保存完整的区块数据,所以硬盘容量不足时,需要及时扩充硬盘。
如果运行的节点对外暴露了RPC服务,对应的参数配置需要依据RPC服务的调用情况来决定。
当然,项目初期和已经发展较为强大的项目需要的配置还不一样,后者配置需要还会更高一些,比如以太坊项目的参数配置如下(最低需求)
· 处理器(CPU):2核
· 内存(Memory):最小4GB内存,如果你使用HDD而不是SSD,则至少8GB
· 带宽(Bandwidth):8+ MBit/sec
· 固态硬盘(SSD):>80GB
而以太坊推荐的配置应该是
· 处理器(CPU):4核及以上
· 内存(Memory):最小16GB内存
· 带宽(Bandwidth):25+ MBit/sec
· 固态硬盘(SSD):>500GB
服务器配置有两种方式可以选择
· 自建服务器–自己购买硬件服务器,连接电、网,运行服务
· 云服务器–购买现成的云服务器,动态配置参数,运行服务
云服务器的优点在于灵活,且成本低,大部分项目的矿工都采用的是云服务器。而自建服务器的成本短时间较高,而且需要7×24小时不断电,不断网,对环境要求较高,好处是一些服务支持可以直接DIY。目前,大部分节点还是搭在云服务器上,如亚马逊的AWS,Google的云服务,阿里的云服务等,这点为去中心化社区所诟病已久,因为所有的去中心化网络的节点服务仍然是搭建在世界的IT巨头手里,社区曾有人想象,如果想摧毁所有的区块链项目,那么摧毁亚马逊和Google就可以了。
升级
节点运行的程序需要保持在正常的版本,要不然无法正常出块。很多更新是不会做旧版兼容的,所以需要节点及时的关注,节点运行的程序和其实和我们使用的APP一样,程序为了修复问题,增加新功能,会做更新,维护节点程序的团队会在合适的时机发布软件更新,但是这种更新不会像手机APP一样,向你发更新推送。这个过程需要节点自己来发现,关注社区,或者自己做监控。
网络中,运行不同版本的节点程序可能会导致网络分叉,在比特币和以太坊上都发生过此类事情。像Bitcoincash比特现金币的分叉事件,其结果都是矿工运行了不同版本的节点软件。
举一个简单的例子,比特币的共识当中,没有机制来保证不分叉,只承认工作量最长的那条链。当网络中出现多个版本的程序时,意味着矿工之间出现了分歧。该分歧下,不同版本出来的块不兼容,矿工之间有权利拒绝将该块下载到本地中。那么比特币中就出现了多条分叉,而比特币会根据工作量来选择哪条链是最终链,没有得到大量算力支持的,会选择自立门户,来支持小算力的分叉链。
PoS中,由于涉及机制的不同,分叉变得不再容易,意味着企图通过运行不同版本的软件来完成分叉变得不可能,但是,PoS是允许矿工之间运行不同版本的程序的。除非是硬分叉,节点程序不兼容。同时,后来的PoS共识设计当中,都会检测节点版本的功能,当不兼容出现时,低版本的程序会被强制踢出选举队列,相当于不能参与选举出块了。
Tezos主网上线一段时间,发生了粉尘攻击,因为创建账号和发送交易不消耗成本,导致攻击者发送了无数多条小额交易,让整个网络”瘫痪”了一段时间。后Tezos开发团队紧急设置了手续费,并发布了更新,很多节点第一时间更新了版本,但是仍然有一部分节点滞后,导致小额交易仍然继续发生,通过社交网络让大部分的节点都进行更新的效果并不好,后来通过一次强制升级,不对前面兼容的协议,让不升级节点不能获得出块权利,这才让大量节点进行了升级,攻击者才停止了攻击。
虽然PoS网络允许运行不同版本的程序,但是对于一个健康的区块链网络来说,所有节点还是及时更新版本为好,毕竟在网络初期,很多更新都是为了安全,而不是像现在的app一样,更新知识带来了一些好看但不中用的功能。
硬件钱包
矿工出块的过程中,需要用到私钥签名,以证明你是这个块的出块人。这个私钥存储在服务器中,节点程序会在需要的时候调用私钥并让其签名,但是节点服务器是暴露在网络当中的,一旦服务器被攻击,私钥有丢失的风险。
一般程序会对私钥进行加密后存储起来,并且尽可能少的调用私钥,就算调用私钥也是调用加密后的私钥,以防止服务器被攻击而丢掉私钥的情况。如在Tezos项目中,将节点声明为矿工时,需要输入15个助记词,并且用一个密码将其加密后再会存储到服务器当中,这样,即使被攻击,攻击者拿到的也是加密后的私钥,没有密码的情况下,私钥是解不出来的。
当然,这依赖于项目方撰写的服务器程序,如果项目方并有为矿工考虑这个加密,那么矿工需要自己来处理这个事情。现在最典型的做法就是使用硬件钱包对外输出签名。硬件钱包有很多品牌,目前比较知名的有Ledger,Trezor等,硬件钱包用户来存储用户私钥,签名的过程私钥并不接触网络,而是将私钥签名后的结果直接输出,这样可以保证私钥的安全性。
矿工使用硬件钱包用来签名,相当于给自己的资产加了一层保险,只要硬件钱包不丢失,一般情况是非常安全的。但是硬件钱包不好的一点就是,并不是所有的项目都支持硬件钱包的签名,参与PoS项目时,需要看看硬件钱包和项目方互相的支持程度,才可以决定是否可以使用硬件钱包来参与出块签名。还有一点就是主流的硬件钱包Ledger还是有线的,说明这个硬件钱包得保持插在电脑上,不能取下来,这点来说还是挺不便利的。
一个有趣的比喻,硬件钱包很想我们现在所有银行的U盾,或者说像很早时期的U盘,但是互联网发展到今天,U盾,U盘已经变得不太被需要,移动钱包的安全性逐渐变得被接受,云空间的使用也逐渐使得U盘变得不再必须,所以有可能,硬件钱包极有可能是一种过渡产物。终极态不好确定,但是我目前能看到的是当加密货币变成主流后,也许主流手机厂商会在手机存储当中单独留一块存储空间给私钥,就像三星最近出的手机S10。
问题
运行节点需要维护好服务器,这对一个团队来说是很重要的,因为一旦维护团队没有人和维护经验,那么碰到问题时没有及时解决的话,后果将会是极其糟糕的,我列举以下几个问题,我们来看看矿工会碰到的问题
防止双签:指不能在同一个高度签署不同个块,双签会被系统Slash或者剥夺出块权利
时刻在线:7×24小时维护网络,断线断网都不可以,严格的系统会剥夺该节点的出块权利,设置是Slash
节点升级:指节点需要及时升级运行版本,以提升系统安全性
配置升级:指节点需要及时监控网络升级后对服务器的需求,特别是及时提高硬盘容量
DDos攻击:指节点需要有足够的能力/架构防止网络中发起的DDos攻击
私钥存储架构:指节点需要专门的架构/程序来保证节点的私钥不会丢失
参与治理:指矿工需要及时参与到项目的治理生态,进行投票
服务器运维是件麻烦的事情,如果没有经验进来后,需要承担一定的风险,特别是双签的Slash或者是被攻击后丢掉私钥的风险,后果极其糟糕。
矿工的未来发展
矿工将会是去中心化网络中不可或缺的角色之一,在可预见的未来,我觉得会有两个趋势
· 验证设备的简单化
· 矿工群体的专业化
首先,参与区块生成的机器配置会变得越来越低,从专业的服务器到电脑,甚至到手机。5G时代的到来,我们会看到越来越多的电器开始联网,你的家具,你的车,都可以成为你运行节点程序的机器,届时随时随地参与到区块链变得可能,同时,个体持币人Stake参与率也会增高,整个区块链世界更加的去中心化。
其次,大矿工群体会越来越倾向于专业化。因为有了委托权益的存在,更专业的矿工会接受到越来越多的委托,矿工有了专业性,维护整个区块链的同时,也可以更好的服务好整个所有委托用户。专业的矿工负责7×24小时的工作,同时会合理的分配奖励,委托用户因为得到好的服务,也更愿意参与到区块链中来。
两个趋势看似矛盾,但实际上会共同发展,最终达到的结果就是专业做大,个体便利。个体矿工会因为便利而存在,但是利益不足以支撑足够的成本,而做大的矿工会让整个模型收益,规模化的“生产”会降低成本,使得整个系统被更好的维护。
有人会诟病矿工做大后的去中心化问题,我觉得只要存在个体自由参与的便利性存在,整个网络就可以形成足够的去中心化,相反,专业化的矿工给整个网络带来的安全性会大于去中心化的需要,而使整个系统收益。所以在可预见的未来里面,专业的矿工会成批出现,然后和个体矿工达到一个平衡。
PoS中的矿工,其实很大一部分都是持币人,持币人为系统做功,系统为其付佣金,和PoW相似,但不完全相同。PoS矿工所做的工作,整个过程就像一个公司,月底给员工发工资,同时,为了让公司发展的更好,对好员工会有激励,对坏行为会有惩罚。矿工如公司职员,大体是这么一个角色。