poa币挖矿
『壹』 POA(Proof of Activity)区块链共识算法
POA(Proof of Activity)算法是一个区块链的共识算法,基本原理是结合POW(Proof of work)和POS(Proof of stake)算法的特点进行工作,POW算法和POS算法的具体内容可以参考:
POW算法 : https://www.jianshu.com/p/b23cbafbbad2
POS算法 : https://blog.csdn.net/wgwgnihao/article/details/80635162
POA算法相比于其他算法可以改进网络拓扑,维持在线节点比例,需求更少的交易费同时减少共识算法过程中的能量损耗。
POA算法需求的网络中同样包含两类节点,矿工和普通参与者,其中普通参与者不一定一直保持在线。POA算法首先由矿工构造区块头,由块头选出N个币,这N个币的所有者参与后续的校验和生成块的过程。
从这里可以看到POA算法不仅与算力有关,后续的N个参与者的选举则完全由参与者在网络中所拥有的币的总数量决定。拥有越多币的参与者越有机会被选为N个后续的参与者。而后续N个参与者参与的必要条件是这N个参与者必须在线,这也是POA命名的由来,POA算法的维护取决于网络中的活跃节点(Active)。
POA算法的一个理想的基本流程是,类似于POW协议,矿工构造出一个符合难度要求的块头,通过矿工得到的块头计算衍生出N个币的编号,从区块链中追溯可以得到这几个币目前所述的参与者。矿工将这个块头发送给这N个参与者,其中前N-1个参与者对这个块进行校验和签名,最后第N个参与者校验并将交易加入到该块中,将这个区块发布出去,即完成一个区块的出块。
一个理想过程如下图所示:
在实际运行中,无法保证网络上所有参与者都在线,而不在线的参与者则无法进行校验和签名,这个无法被校验和签名的块头则会被废弃。
即在实际运行中,应该是一个矿工构造出块头后广播给各个参与者签名,同时继续重新构造新的块头,以免上一个块头衍生的N个参与者存在有某一个没有在线,而导致块头被废弃。
因此,在这种情况下,一个块是否被确认不仅与矿工的计算能力有关同时也与网络上的在线比例有关。
与纯POW相比,在与比特币(POW)同样10分钟出一个块的情况下,POA由于会有参与者不在线而产生的损耗,因此,10分钟内矿工可以构造的块的数量会更多,即块头的难度限制会降低,那么矿工在挖矿过程中会造成的能量损耗也会降低。
与纯POS相比,可以看到POA的出块流程并不会将构造区块过程中的相关信息上链,可以明显减少区块链上用于维护协议产生的冗余信息的量。
本节对上诉协议中一些参数设置进行分析
在矿工构造出块头后对块头进行校验和区块构造的N个参与者的数量选定比较类似于比特币中每一个块的出块时间的选取。比特币中选择了10分钟作为每一个块的期望出块时间并通过动态调节难度来适应。
这里N的取值同样可以选择选定值或者动态调节。动态调节需要更加复杂的协议内容,同时可能会带来区块链的数据膨胀,而复杂的协议也增加了攻击者攻击的可能性。另外暂时没有办法证明动态调节可以带来什么好处。静态调节在后续的分析(4 安全分析)中可以得到N=3的取值是比较合适的。
从上面的描述可以看到,构造新的区块的除了矿工还有从块头中衍生出来的N个币所有者。在构造出一个新的区块后,这些参与者同样应该收到一定的激励,以维持参与者保持在线状态。
矿工与参与者之间的非配比例与参与者的在线状态相关。给予参与者的激励与参与者保持在线状态的热情密切相关,越多参与者保持在线状态,能更好地维持网络的稳定。因此,可以在网络上在线参与者不够多的时候,提高参与者得到的激励分成比例,从而激发更多的参与者上线。
如何确定当前参与者的在线情况呢?可以最后第N个参与者构造区块时,将构造出来但是被废弃的块头加入到区块中,如果被丢弃的块头数量过多,说明在线人数过低,应当调节分成比例。
同时最后第N个参与者与其他参与者的分成同样需要考虑,第N个参与者需要将交易加入区块中,即需要维护UTXO池,同时第N个参与者还需要将被丢弃的块头加入新构建的区块中。
为了激励其将废弃区块头加入新构建的区块中,可以按照加入的区块头,适当增加一点小的激励。虽然加入更多的区块头,可以在下一轮的时候增加分成的比例,应当足够激励参与者往区块中加入未使用的块头了(这里参与者不可能为了增加分成而更多地加入区块头,每一个区块头都意味着一位矿工的工作量)。
一个参与者如果没有维护UTXO池则无法构造区块,但是可以参与前N-1个的签名,因此为了激励参与者维护UTXO池,作为最后一个构造区块的参与者,必须给予更多的激励,比如是其他参与者的两倍。
从3.2的描述中可以知道一个用户必须在线且维护UTXO池才可能尽可能地获得利益。这种机制势必会导致一些用户将自己的账户托管给一个中心化的机构。这个机构一直保持在线,并为用户维护其账户,在被选为构造区块的参与者时参与区块的构建并获取利益。最后该机构将收益按照某种形式进行分成。
上面说到参与者必须用自己的密钥进行签名,而托管给某个机构后,这个机构在可以用这个密钥签名构造区块的同时,也有可能使用这个密钥消费用户的财产。这里可以采用一种有限花销的密钥,这个密钥有两个功能,一个是将账户中的部分财产消费出去,另一个是将所有财产转移到一个指定账户。在托管的时候可以使用这个密钥,在被通知部分财产被花费后可以立即将所有财产转移到自己的另一个账户下,以保证财产的安全。
从上面的分析可以看到,POA的安全性与攻击者所拥有的算力和攻击者所拥有的股权有关。假设攻击者拥有的在线股权占比为 ,则攻击者的算力需要达到其他所有算力的 倍才能达成分叉。假设攻击者股权总占比为 ,网络中诚实用户的在线比例为 ,则攻击者的算力需要达到其他所有算力的 倍才能达成攻击。
攻击的分析表格如下:
从上文的分析可以看到,POA算法相比于其他算法可以改进网络拓扑,维持在线节点比例,需求更少的交易费同时减少共识算法过程中的能量损耗。同时,PoA协议的攻击成本要高于比特币的纯PoW协议。
参考文献:Proof of Activity: Extending Bitcoin’s Proof of Work via Proof of Stake
『贰』 以太坊获取测试链代币
发起以太坊交易时需要消耗以太币,开发智能合约做测试时如果在主网做测试成本会很高,并且主网的速度也比较慢,以太坊官方考虑到大家的这个需求提供了几条测试链供大家使用,比较知名的有以下这几个
以太坊的主测试网,环境最接近主网环境,有实际的雷锋矿工在挖矿,只不过难度会比主网低很多,不过由于 Ropsten 采用与主网完全一样的 PoW 共识,有时也就会和主网一样拥堵,在这条链上做测试更容易测试出智能合约或者dapp里潜在的问题
用的是 PoA 机制,无需挖矿,所以出块很快而且很稳定
和Rinkeby同样使用的是 PoA 机制
打开这个网址 https://faucet.metamask.io/
点击 request 1 ether from faucet 按钮会通过web3连接钱包,获取到钱包当前账户的以太坊地址,这个我使用的钱包是MetaMask,如果你没有装支持web3访问的钱包,可以参考这篇文章安装
https://www.jianshu.com/p/a84fe16f1af7
点击连接
连接成功后底部会生成一笔交易,hash值
等交易确认后一个以太坊就到账了
Rinkeby获取测试币相对麻烦些,需要注册twitter账号(需要翻墙)
打开这个网址 https://twitter.com/intent/tweet?text=Requesting%20faucet%20funds%20into%%20on%20the%20%23Rinkeby%20%23Ethereum%20test%20network
把推文中替换成你的地址点击TWEET,发送成功后点击分享图标选择Copy link to Tweet,把推文的链接复制下来
然后打开Rinkeby测试币水龙头网页 https://www.rinkeby.io/#faucet
把刚才那个推文链接复制进输入框,点击Give me Ether
根据你的需要选择要多少个代币,要的越多到账越慢😓,到账时间相对其它的测试链很慢,如果着急就用别的链做测试
打开这个网址 https://faucet.kovan.network/ ,需要使用github账号登陆
登陆成功后输入以太坊地址,点击发送就好了,转账交易就提交到链上了
同样的等待交易确认就能收到一个以太币了
『叁』 区块链的共识机制
所谓“共识机制”,是通过特殊节点的投票,在很短的时间内完成对交易的验证和确认;对一笔交易,如果利益不相干的若干个节点能够达成共识,我们就可以认为全网对此也能够达成共识。北京木奇移动技术有限公司,专业的区块链外包开发公司,欢迎洽谈合作。下面我们将一下区块链的几种共识机制,希望对大家了解区块链基础技术有帮助。
因为区块链技术的发展, 大家对共识机制这个词也不再陌生,随着技术发展,各种创新的共识机制也在发展。
POW工作量证明
比特币就是使用PoW工作量证明机制,到后来的以太坊都是PoW的共识机制。Pow相当于算出很难的数学难题,就是计算出新区块的hash值,而且计算的难度会每一段时间就会调整。PoW虽然是大家比较认可的共识机制,计算会消耗大量的能源,还有可能会污染环境。
POS权益证明
通过持有Token的数量和时长来决定获得记账权的机率。相比POW,POS避免了挖矿造成大量的资源浪费,缩短了各个节点之间达成共识的时间,网络环境好的话可实现毫秒级,对节点性能要求低。
但POS的缺点同样明显,持有Token多的节点更有机会获得记账权,这将导致“马太效应”,富者越富,破坏了区块链的去中心化。
DPOS权益证明
DPOS委托权益证明与POS原理相同,其主要区别在于,DPOS的Token持有者可以投票选举代理人作为超级节点,负责在网络上生产区块并维护共识规则。如果这些节点未能履行职责,将投票选出新的节点。同样的弊端也是倾向于中心化。
POA权威证明
POA节点之间无需进行通信即可达成共识,因此效率极高。并且它也能很好地对抗算力攻击,安全性较高。但是POA需要一个集中的权威节点来验证身份,这就意味着它会损害区块链的去中心化,这也是在去中心化和提高效率之间的妥协。
『肆』 搭建geth私有链和联盟链网络
操作系统:linux或Mac OS
安装geth执行以下命令:
linux:sudo apt-get install ethereum
Mac OS:brew install ethereum
直接创建两个geth的工作目录,用于之后的组建联盟链的使用:
mkdir eth-private1
mkdir eth-private2
首先 cd eth-private1 进入节点1的工作目录该目录下执行下面命令
geth --datadir data --nodiscover console (data是之后geth节点的数据目录,可自行修改)
使用geth自带的工具 puppeth 用于生成创世区块,过程如下:
puppeth
+-----------------------------------------------------------+
| Welcome to puppeth, your Ethereum private network manager |
| |
| This tool lets you create a new Ethereum network down to |
| the genesis block, bootnodes, miners and ethstats servers |
| without the hassle that it would normally entail. |
| |
| Puppeth uses SSH to dial in to remote servers, and builds |
| its network components out of Docker containers using the |
| docker-compose toolset. |
+-----------------------------------------------------------+
Please specify a network name to administer (no spaces, please)
输入私链名称后,会出现二级菜单,现在2:配置一个新的创世快
What would you like to do? (default = stats)
再次出现二级菜单,让你选择共识机制(这里采用poa共识)
Which consensus engine to use? (default = clique)
Ethash - proof-of-work(PoW) :工作量证明,通过算力达成共识 (以太坊就是使用这种方式)
Clique - proof-of-authority(PoA): 权威证明、通过预先设定的权威节点来负责达成共识 (不消耗算力,一般用于私有链测试开发)
如果选择Pow的共识方法,直接输入1,回车即可。
如果选择PoA的共识方法,输入2后会提示让你选择处快的间隔时间,一般测试开发使用可以设置相对的将处快时间设置较少5秒即可,然后会让你选择哪个账户来作为权威生成区块(至少有一个,输入刚才创建的账户,若只是单节点就输入那个节点目录生成的地址,若想组建联盟链就填写生成的两个地址)
How many seconds should blocks take? (default = 15)
选择好共识机制后会让你指定给那些账号初始化ether(至少有一个),输入我们刚才创建的账户地址回车即可。
Which accounts should be pre-funded? (advisable at least one)
选择输入私有链的网络ID,任意数字即可(不能为1,1是公链),也可以不输入会给定一个随机数作为私有链的网络ID
Specify your chain/network ID if you want an explicit one (default = random)
选择导出创世区块配置文件
选择导出创世区块配置文件的保存路径,可以保存到当前目录,直接按回车即可
Which file to save the genesis into? (default = my-private-chain.json)
INFO [02-09|14:56:33] Exported existing genesis block
这样就完成了创世区块文件的配置了,直接退出puppeth即可。
输入命令 geth --datadir data init private.json 其中data自己制定,private.json就是刚才生成的创世区块
若出现如图错误:
输入命令:
geth --datadir data --syncmode full --port 2001 --networkid 1234 --rpc --rpcport "8545" --rpccorsdomain "*" --rpcaddr "0.0.0.0" --rpcapi "db,eth,net,web3,personal,admin,clique" --nodiscover console 进入控制台
--datadir data:节点的数据目录
--syncmode full:块同步的方式(若只是单节点可不填)
--port 2001: 网卡监听端口
--networkid 1234:网络标识符
--rpc:开启rpc服务
--rpcport "8545":rpc服务的端口
--rpccorsdomain "*":允许跨域请求的域名列表(逗号分隔)(浏览器强制)
--rpcaddr "0.0.0.0" :HTTP-RPC服务器接口地址(默认值:“localhost”)
--rpcapi "db,eth,net,web3,personal,admin,clique":基于HTTP-RPC接口提供的API(私有链可以任意开发,公有链需要谨慎)
--nodiscover:不允许节点自动加入
若想搭建联盟链,必须保证创世区块一致,进入到刚才创建的eth-private2的目录
将之前生成的创世区块拷贝过来,初始化创世区块,然后使用启动命令启动分别启动两个节点,进入控制台,使用 admin.nodeInfo 命令获取节点的信息
总结:
两个服务器部署两个节点是可以联通的,但是只能使用两个节点对应的地址进行挖矿,所以只能是两个节点对应两个地址进行挖矿,使用poa共识,当一个节点挂掉,挖矿停止,因为poa共识挖矿必须超过50%的节点进行钱增,现在只是两个节点,挂掉一个节点挖矿就会停止等待另一个节点的确认,停掉的节点可以通过正常运作的节点信息重新连接到网络中。
问题:
同步块有可能报错情况:
1:Synchronisation failed "retrieved hash chain is invalid" 解决目前找到的方法是removedb 数据目录 ,重新init创世区块
2:内存溢出初步确认为开启rpc服务造成的,有可能服务器恶意被黑,暴力破解密码,占有内存,解决,将服务器的ip设置一条防火墙
若存在问题可给本人留言或访问本人的github: https://github.com/qi-shuo/geth-document 记录了一些本人搭建使用的命令
『伍』 区块链共识算法——(四)PoA共识(Proof of Activity)
PoA共识(Proof of Activity)也称为活动证明,其结合了PoW工作量证明与PoS权益证明的特点并进行了相应扩展,PoA共识具有更为复杂的记账节点选取,同时有更为公平的奖励机制。
PoA活动证明,主要的优势是利用公平的激励措施保证节点保持在线状态,调动节点积极性,线上矿工即使不挖矿也有一定的概率获取收益。大大提高了全网维护质量。
step1:每个矿工先利用自身算力通过工作量证明机制后得出nonce并生成一个空区块头,这个区块头除了没有交易信息数据外其他数据与正常区块一致。
step2:最先生成空区块的节点广播全网节点,全网节点接收到消息后,将此区块的hash值与上一区块的hash值进行拼接,然后加上n个固定后缀值进行再hash,最后得出n个值作为输入,进入follow-the-satoshi程序,然后可输出n个随机权益持有者。
step3:前n-1个随机权益持有者对空区块进行签名,第n个随机权益持有者即为获取到记账权的节点,他将在空区块的基础上添加交易数据与签名。
step4:第n个随机权益持有者将打包好的区块广播全网,全网节点接收到区块后进行验证,验证成功后上链。
step5:产生空区块的矿工与第n个随机权益持有者以及前n-1个已签名的随机权益持有者共享交易费奖励。
『陆』 poa共识机制
我在使用puppeth工具创建PoA共识机制的时候,这里提示,要提供至少一个账户,请问,这里的账户作用是什么? 是指挖矿的账户吗?
答:poa是授权挖矿机制,这个设的是允许哪些账户挖矿,没有设置的账户是不能挖矿的。后期可以通过投票机制修改授权挖矿账户。
链客区块链技术问答社区
『柒』 挖矿挖的是什么
首先,网络里挖矿是指矿工通过特定的设备进行一定工作量的运算,计算出符合要求的区块哈希值从而争取记账权,并获得相应的奖励,也可以将其看成是一个向记录着数字货币过往交易的账本中添加新交易的过程。
上面的定义,局限性在于:没有明确指出挖矿挖出的到底是什么。挖矿挖出的是区块,既然这些区块由数字符号组成,那么也可以说挖出的就是一串数字而已。但是,这些数字代表着矿工可以获取的奖励,或者说是收益,所以,挖出的又可以说成收益。但是区块奖励随着币价的波动而波动,影响币价的最大因素在于受众范围的大小。比特币在诞生之初,随便一台电脑每月就可以挖出成百上千的比特币,由于无人问津,矿工买个披萨都需要上万枚比特币。但是,随着接受比特币的人群增加,比特币的价格翻了上万倍!所以,最终我们可以说:挖矿挖的就是未来社会对某一数字货币的共识预期。
矿工,是指一群专注于“挖矿”的人,可以指一个人,也可以是一个群体。随着技术的不断进步,矿工不再仅仅局限于使用硬件设备挖矿,投入时间、精力、甚至脑力等,都可以在一些项目中挖出数量不一的数字货币。既然挖的是未来社会对某一数字货币的共识预期,这个收益也就充满了不确定性。为了更好区分,笔者从“硬件”挖矿和“软件”挖矿进行区分。
一、“硬件”挖矿
这个挖矿由于需要投入大量的硬件设备,所以基本上是前期接触的人群获利最大,而且要求很高,逐步向专业化过度。目前,单独的某一个矿工已经很难在拼算力、拼硬件、拼迭代速度的矿工军备竞赛中生存下去,所以大部分矿工会选择合作,通过共建的矿池来达到盈利的目的。
由于是挖的共识预期,这让价格波动尤为剧烈,而硬件矿工的设备投入、维保、迭代、场地租赁、人工、水电费等都需要真金白银的付出,所以这类矿工压力巨大,一不小心可能会血本无归。影响共识的因素是多方面的,为了实现稳定、可持续、最大化的利益,硬件矿工通常的选择是:牛市将手中的币卖出,换成法币或者其他稳定币,静静等待熊市;熊市中,则尽可能的屯币,并用之前的积累的法币或稳定币来“过冬取暖”。
作为硬件矿工,对牛市期盼,同样也不拒绝熊市的到来。牛市中,矿工大量增加,同样会提升挖矿的难度,奖励锐减;熊市中,币价腰斩,但是挖矿的奖励会因为矿工的减少而增加。通过牛熊交替,他们才能实现收益的最大化。而牛熊交替,即使四年一个周期,也需要付出常人难以忍受的坚持。
二、“软件”矿工
这类矿工,是指通过投入资金、时间、精力、脑力等非硬件进行挖矿的行为。
随着技术进步,POW机制已经不能满足人们的需求,目前市面上已经被大量应用的共识算法有三十多种,POS、DPOS、POI、POB、POA等可以看成是对POW机制的补充。在这类挖矿行为中,矿工通常是需要买入、持有一定量的数字货币,并通过数字货币的增值来获取收益。为了实现利益的最大化,这个持有时间通常也是以年为单位,以币市的牛熊交替为大周期,所以没有耐心的矿工,注定会被淘汰出局。
这里面还有一类矿工,藏宝阁想重点阐述一下:就是不投入资金而在各个项目初期进行撸糖果、薅羊毛的矿工(后面为便于阐述,统一用Token代替),当然在UGC平台进行创作,也归于这类矿工之中。
数字货币目前除了有主流币、山寨币之分,还有世界币、竞争币之分。目前我们撸糖果、薅羊毛获得的Token基本为竞争币:项目方为了项目发展融资、推广而发行的数字货币(不是为了弥补数字货币技术的不足)。这类数字货币首先会有一个中心化的团队进行管理;其次会经历一个由幼小到强大的成长过程;最后,是该项目的成长结果影响用户手中币的最终价值。这类挖矿中,矿工付出的是时间、精力、脑力等,获得的Token 可以看成是股权、或者带有分红性质的权益证明。那么,决定矿工收益的就是这个项目能否落地活下来,并最终被越来越多的群体所接受,如果能成长为区块链行业中的独角兽,那带给矿工的收益就足以实现财富自由了。
但是,有竞争就会有优胜劣汰,竞争币的项目方中,注定会有大量的项目死去,这样矿工手里的Token就是数字而已,不能产生任何的价值。所以,矿工通常面临的选择是:尽早卖出手中的Token换成BTC等主流币或是耐心持有,等待这些Token像瑞波币一样,实现惊天大逆转。五元投资,上亿收益,这样的机会用白日做梦已经不足以形容,但是币圈就是一个造就神话的地方,所以藏宝阁的做法就是屯!毕竟手中的Token卖个十块八块的也没什么意思,藏宝阁更愿意陪着项目一起成长,同时广撒网,想办法获得更多的项目Token,提到钱包,静静等待项目成长带来的红利。
三、结语
从文中可以总结出:不论是采用 “硬件”,还是 “软件”,挖矿挖出的都是对未来收益的预期:未来认可的人多,该币带来的收益就好;未来无人问津,这个币就有可能归零,矿工收益为负。但是预期,通常需要很长的时间来验证,包括随之而来的机会,也往往蕴藏在最初的平淡无奇之中。区块链必然带来颠覆性的社会变革,这是加入币圈的矿工最基本的信仰,所以不妨放弃眼前的鸡毛蒜皮,耐心持有数字货币,以牛熊更替的周期为操作频率,这样,才能获取最大的收益。
『捌』 以太坊测试网络testNet汇总
在以太坊的交易过程中需要使用到以太币,我们想要获得以太坊主网上的代币,只能通过GPU矿机挖矿或者交易所购买。然而在测试环境中获取eth就容易多了。你可以在 私有链 中自己挖矿,或者公共测试链( testnet )中直接获得。下面就和大家讲讲常用的几种以太坊测试网络。
测试网络(简称testnet) 用于模拟以太网主网的行为。拥有几乎和以太坊等效的功能。因此可以在Testnets上开发和测试自己的智能合约,测试发币等等,作为上链前的评估环境。当主网(简称mainnet)即将包含对以太坊协议的任何重大改变时,其测试主要在这些测试网络上完成。注意:这些网络上的代币只能在测试环境(开发环境)中使用。
Ethereum以太坊有许多专用测试网络,他们由各种客户端支持,最常用的3种分别是Ropsten、Kovan、Rinkeby。
以上3个是不需要在本地搭建任何服务就可以直接使用的。
对于开发中的测试环境,建议你使用 Rinkeby 或 KoVan 测试链。这是因为他们使用的工作量证明 POA 共识机制,确保交易和块能够一致并及时的创建。 Ropsten 测试链,虽然最接近公有链( Mainnet ),但是因为它使用的工作量证明是POW共识机制,过去已受到垃圾攻击,对以太坊开发人员来说往往有更多的问题。
推荐:
以太坊测试网络Rinkeby使用教程
Rospten 以太坊测试网络的使用
『玖』 FileCoin: 有用的工作量证明
有用的工作量证明(Proof of Useful Work)是由著名的去中心化存储项目 FileCoin 在它的白皮书里提出来的一个概念。工作量证明,Proof of Work,POW 是实现区块链的一个重要共识方式,FileCoin 要实现一个基于区块链的存储平台。所以它也要做共识,它选择的就是工作量证明共识。
首先我们来解释一下常规的工作量证明。它是区块链实现共识的一种方式。是比特币采用的方式,所以,工作量证明就是俗称的“挖矿”。比特币做为一个去中心化的点对点交易系统,要在不同的节点上维护一个共同的完全相同的帐本,来记录所有的交易,而且确保交易不会重复,不会一笔钱多花,就需要一个维护这个账本一致性的规则。大家一起遵守这个规则,就是共识。区块链常用的方法是,把这个账本分成很多页,每个页就是一个区块。每个区块由一个节点来记账,然后分发给其他节点复制,这样所有节点上的账本都是一样的。但是每个区块都由哪个节点来记录,就需要一个大家都能遵守的规则。比特币采用的方法,是让所有的节点做一道简单的数学题,题目很简单,但是计算量很大,一般要10分钟左右才能做出答案来。得到答案虽然很费时间,但是验证答案是否正确很容易。然后所有的节点同时做题,第一个做出来的节点,就得到下一个区块的记账权。因为每个区块都只有唯一一个最早做出题的节点,所以,每个区块的记账权是唯一的,而且也是很容易被其他节点验证的。节点一旦验证到其他节点得到了区块记账权,就必须复制区块,加到本地区块链中,同时开始下一个区块记账权的竞争。通过这种方式,比特币就能确保所有节点的区块链是一致的。
节点通过大量计算竞争区块记账权的的过程,就是工作量证明。所以,工作量证明系统(或者说协议、函数),是一种应对拒绝服务攻击和其他服务滥用的经济对策。它要求发起者进行一定量的运算,也就意味着需要消耗计算机一定的时间。这个概念由 Cynthia Dwork 和 Moni Naor 1993 年在学术论文中首次提出。而工作量证明(POW)这个名词,则是在 1999 年 Markus Jakobsson 和 Ari Juels 的文章中才被真正提出。
实现区块链共识的方式还有很多,如POS,DPOS,POA,PBFT等等,但是工作量证明是唯一被时间验证过(11年)的在公链上运行的区块链共识机制。
工作量证明存在一个什么样的问题呢?还是用比特币为例。比特币节点为了获取出块权做得那个数学题,叫哈希运算。计算量非常大,每一台参与比特币挖矿的矿机都要时刻进行这个计算,耗费大量的电力。这个计算不像其他的如大数据处理的计算,可以产生一些价值,它的唯一目的,就是竞争出一个节点,成为下一区块的出块者。目前比特币每年消耗电量约25.5亿瓦,这相当于全球电量的0.5%,是爱尔兰一年的耗电量。反对POW的人纷纷指责挖矿将电力资源浪费在虚无缥缈的数字货币上,还称之为自由主义的“泔水”。
但是,认为POW是浪费的电的人不知道,正是能源和算力打造了比特币安全不可攻破的体系。
一张100元的现金不只是你我认为他值100,而是整个社会群体都认为他值100,价值就是来自于共识。比特币是社区行为,来自不同国家的人聚集到社区,用互联网来建立秩序,它的意义也是来自于群体共识,只要大家都相信比特币有价值,只共识存在,那么他就有价值,和法币一模一样。所以产生价值认同并不一定需要国家来驱动,比特币改革了一种传递信任的载体和媒介,千百年来,人类社会通过多少流血战争建立的政权和共识,现在兵不血刃,只是耗费些电力就实现,岂不是更先进。
总结而言,要想设计一个去中心化而且安全的数字货币,能源和算力是必要的代价。工作量证明是以去中心化形式构建安全产权认证系统的唯一方案。所以认为POW是浪费的电的人不知道,正是能源和算力打造了比特币安全不可攻破的体系。现在比特币全网算力已经达到一个非常恐怖的地步,任何人想要发动51%算力攻击已经是不可能的事情了,POW算法使比特币系统牢不可破。
为缔造价值而产生的消耗不叫浪费。
但是,如此多的算力,是否可以用来创造更多的价值呢?用 FileCoin 的话说,工作量证明,还有没有其他用途呢?
FileCoin 是分布式存储行业的明星项目。他的开发团队 Protocol Lab 就是开发 IPFS 协议的团队,以至于很多人都分不清FileCoin 和 IPFS 的区别。可以说是2017年 FileCoin 的1CO,把这个行业推向巅峰,也引出了一系列的同类型项目。本文无意于赞誉或者贬低这个项目,只想结合自己从事这个行业的经验,表达一些自己的观点,尽量做到客观公正。希望对从事这个行业的人有一些启发。
FileCoin 在白皮书中提出要实现一个有用的工作量证明,实际上就是认可了,要打造一个安全不可攻破的区块链,就必须消耗工作量。但是,他们不希望为这个工作量做出的计算完全被浪费,所以想把这个工作量利用起来。所以,他们想到的方法是,在工作量证明里加入存储空间的使用率。这样,所有的节点为了形成共识,就必须提供存储空间来存文件。这个存储空间就可以存用户数据,就是有用的。
那我们来看一下FileCoin是怎样实现这种有用的工作量证明共识的。
Filecoin采用的共识机制并不是简单的工作量证明,而是一种叫做预期共识(Expected Consensus,简称 EC)的机制。和其他主流共识机制目标一样,让矿工争夺某一个高度唯一的出块权而获得奖励。这个获得出块权的矿工叫做 Leader。在每一轮的出块争夺中,为了保证账本的可靠性,都有一个唯一的 leader 来进行记账。
也就是说,共识的核心就是选择谁来当 Leader。选 Leader 的方式一般有两种,交互式或者非交互式。交互式是要矿工之间互相投票的。比如 PBFT 就是交互式的,几个参与选举的人通过互发信息,得到多数票( 超过 2/3 )的人就是 Leader。预期共识采用了非交互式的方式来选举 Leader。参与的各方根本不给彼此发消息,而是每个节点各自独立私下进行运算。最后某个节点说,我赢得了选举,然后提供一个证明,其他人可以很容易就验证,他确实赢得了选举。这个验证方法就是零知识证明。
预期共识机制会为区块链网络预设一个出块的期望值。比如每1个纪元(epoch)生成1个区块(block),但也有一个纪元可能出现空块或多个区块的情况。所以在 Filecoin 中,每个高度不是一个区块,而是一个区块集,叫做 TipSet,这个 TipSet 中可能包含了多个区块。所以实际上 Filecoin 是 TipSet 链。预期共识无法保证每一轮只选举出一个 Leader,所以会出现一轮中有多个 Leader 的可能,这样链式结构就变成了DAG的网状结构。所以 FileCoin 还会对 block 赋权重,实现有效收敛。
FileCoin 采用的 EC 共识有一个好处。对于传统的 POS 共识机制来说,有一个重大问题就是无法控制分叉。也就是说,由于挖矿成本低,参与者可以同时挖多个链获取利益。而预期共识对这一点做了设计,那就是通过权重和抵押机制来促使矿工选择一条最好的链,对同时挖多个链的矿工进行惩罚,这样可以非常快速地促进收敛。这说明 POW 和 POS 共同使用会是一种好的方式。
每一个矿工获得出块的可能与其当前有效存储量占全网总存储量正相关。这种期望共识机制其实是更像是 POS 权益证明,只是它将POS里边的权益(Staking)换成了有效存储占比。但是矿工的有效存储从何而来呢?是通过存储用户数据得来。如何证明矿工存储了用户的数据,FileCoin 创造出一个新的证明机制叫 POST 时空复制证明。这个 POST 就是 FileCoin 的工作量了。把耗电的算力换成存储有用数据的存储空间,无意义的军备竞争变成了存储服务市场竞争。这确实是 FileCoin 的进步之处。只不过,为了成功的出块,矿工通过预期共识被选为出块节点后,必须在一个块的时间里(现在是45秒)做个 POST 证明,成功提交,才能出块。否则就失去机会。所以,为了确保矿工能在指定时间内出块,最终官方还是决定要使用 GPU。虽然这 GPU 不是像工作量证明那样一直不停的工作,但是在整个实现共识的过程中还是出现了跟有用的工作量证明思想相违背的耗能计算。
还有,谈到预期共识的时候,我们说到每一个纪元出块都不是一个块,而是一组块,那么纪元这个概念就很重要了。怎么控制纪元呢?每个矿工在参与选举前,需要先生成一个 Ticket,这个 Ticket 实际上是一个随机数,他需要走一个 VDF 和 VRF 的流程,这个 VDF 全称 Verifiable Delay Function,可验证的延时函数。他的计算流程是串行的,需要花费一定的时间,并且这个时间无法通过多核并行的方式进行缩减。这保证了每个矿工产生 Ticket 时必须要消耗的时间,没有人可以通过优化硬件的方式来获得加速。听上去这函数很完美,可是,这个 VDF 根本还不存在!现在 FileCoin 测试网直接使用了一个等待函数 sleep,这是 UDF,Unverifiable Delay Function。现在最接近的 VDF 解决方案,也是需要消耗大量计算资源的。说白了,还是要耗电,还是不环保。
所以,有用的工作量证明,依然只是一个美好的愿望,理想很丰满,但现实很骨感。被誉为下一个比特币的 FIL,还要继续为实现这个颠覆性的共识而努力。
总结一下FileCoin存储矿工获取激励的流程:用户存储数据,支付FIL费用 -> 矿工存储数据 -> 生成复制证明 -> 完成时空证明 -> 经过EC共识,选出出块Leader -> 获取打包权 -> 矿工获取FIL奖励
在这个流程图上,可以看到,矿工可以在两个地方获取奖励。一个是存储用户文件的时候可以得到用户的FIL奖励。一个是在获取区块打包权后获得FIL。而得到区块打包权的一个前提就是存有足够多的用户数据。所以,在存储需求不够大的情况下,矿工会从用户那里收取很低廉的费用。在用户不够的情况下,甚至会倒贴钱自己付FIL存数据,只为能够存足够多的数据,在 EC 共识中被选成 Leader 得到打包奖励。这样产生的效果是,FileCoin 对用户非常友好,存储费用非常低。所以,一定会吸引很多的应用来这个平台上做开发。但是缺点也很明显,如果存储量不够大,矿工根本没法跟其他人争夺出块权,所以得不到奖励。最后整个平台会朝着大矿工,大矿池的方向发展,这跟 FileCoin 想把所有闲散服务器利用起来实现分布式存储的初衷是违背的。或者说,一定要等到这个行业具有一定规模,技术更成熟,才有小矿机挖矿的机会。
我们先来简单的讲一讲中心化存储和去中心化存储各自的利弊。中心化存储设备统一管理,可靠性好,性能高,去中心化存储数据天然分散,易于流通,容灾性好,但是可靠性低。从经济角度来说,中心化存储是重资产投入,成本高。去中心化存储通过区块链激励层,用户自行加入,轻资产,可降低存储总成本。未来应用数据的存储和处理还会是以中心化存储为主,而去中心化存储因为是分布式网络,主要可用于热门数据流量分发。同时,因为没有中心化所有权,可以成为去中心化应用的首选。
市场上有一种说法是,去中心化网络适合冷数据的备份,其实这并不是去中心化存储的优点,实在是因为把热数据放到去中心化网络上太不可靠,处理性能也跟不上。所以,如果去中心化存储能实现一定的规模效应,大大降低存储成本,把冷数据备份当作核心业务,并把目标定位在今天因为成本太高没被企业存储的冷数据,会是一个很好的发展方向。
如此说来,从技术上讲,去中心化存储并不一定比中心化存储有优势。如果能推行一种新的模式,把去中心化的经济激励和中心化的存储合在一起,就能吸收两者的长处。真正实现有用的工作量。FileCoin 未来可能促成的大矿场模式的数据中心,可能更有市场。
在11年后的今天,比特币并没有实现它成为一个点对点的电子支付货币的初衷,但阻止不了人类前赴后继的去买它,拥有它。同样,我相信 FileCoin 已经得到足够大的社群,矿工和开发者的支持,即使在可预见的未来,它不会促成分布式存储应用的全面落地(也许这从来不是 FileCoin 的目标),但我还是相信会有很多人会因为它的共识去购买它,持有它。上升到哲学层面,人类在为真理买单。
那么在实际生活中,何为有用,或者说,我们到底是在用存储做共识还是用共识做存储?FileCoin 是前者。FileCoin 想要基于存储工作量实现的去中心化的共识,理论上是完美的,追求完美,人类是要付出代价的。这也是为什么在这个项目上我们等待了这么长的时间。但是一旦实现,它可能会为人类带来巨大价值,对市场带来无穷大的号召力。
只不过去中心化不是万物的灵药。中心化的一个最大优势是它的效率非常高。像dPOS或者联盟链这样的弱中心化共识兼顾两者优势,能更快速的把应用推向市场,提前启动分布式存储行业,推进分布式存储应用落地。所以,我们既追求用存储做共识,也追求用共识做存储,根据实际需求来做出我们的选择。在这个过程中,相信区块链也会进一步发展,逐步优化,变得越来越有用。