提示:以下内容只是个人在学习过程中记录的笔记,图片均是肖老师课程的截图,可供参考。如有错误或不足之处,请大家指正。
权益证明proof of stake
比特币和 以太坊目前都是使用基于工作量的证明,这种共识机制受到一个普遍的批评——浪费电。
Y轴是TWH=Terawatt hours 10的 12次方
KWH=Kilowatt hours 10的3次方 (千瓦式)
一个交易要花一千度电。
以太坊能耗比比特币低的原因:比特币出块时间长,以太坊出块时间短,平均下来能耗低。
挖矿过程中的这些能耗是不是必须的?
矿工为了取得出块奖励而挖矿,为了激励矿工参与维护系统而有出块奖励。
挖矿的收益实际上是靠投入的资金决定的。
权益证明(virtual mining)
采用权益证明的加密货币会在发行之前预留一部分货币给开发者,也会出售一部分货币来获得发行的资金。
和工作量证明相比,权益证明的优点:
1、省去了挖矿的过程,避免了对能耗和环境的影响,减少了温室气体的排放
2、基于工作量证明的系统维护系统的安全不是一个闭环,挖矿设备不是在系统的生态圈中,是外部的资源,可以转化为挖矿的算力,转化成对挖矿攻击的能力。
采用权益证明,假设如果要发动51%攻击,需要有占比51%以上的币种,才能发动。这些币种是系统内部的,是一个闭环,外部的资源不会对系统安全造成直接影响。
权益证明遇到的挑战——两边下注问题 nothing at stake
在一条链上,出现分叉A、B,A链暂时是最长合法链,权益证明的情况下,可以对A、B两条链同时下注,锁定的币不会影响其他链的使用。
以太坊中准备采用的协议证明是Casper the Friendly Finality Gadget(FFG),在过渡阶段要和工作量证明混合使用,为工作量证明提供Finality, Finality是最终状态,包含在Finality的交易不会被取消。
Casper协议引入验证者(validator),要想成为validator,需要投入一定数量的以太币作为保证金,保证金会被系统锁定住。 Validator的作用是推动系统达成共识,投票决定哪条链是最长合法链,投票权重取决于投入保证金数目大小。
具体做法:挖矿时每挖出一个区块就作为一个epoch,决定是否能成为Finality要进行投票,两轮投票(two-phase commit),第一轮投票是prepare message,第二轮投票是commit message, Caspe协议规定每一轮投票都要得到2/3验证者才能通过,按照保证金实际大小来算。
实际系统中,不区分两个message,把epoch从原来100个区块减少到50个区块,每个epoch只用一轮投票就行,这轮投票对于上一个epoch是commit message,对于下一个epoch是prepare message,要连续两轮投票都得到2/3的票数才算有效。
验证者参与这个过程的好处:
如果验证者履行职责,可以得到相应的奖励,如果有不良行为被发现,要受到相应的惩罚,如扣除保证金、没收全部保证金(销毁)。
验证者有一定任期,任期满了要经过一段时间的等待期,等待期是为了其他节点可以检举揭发。如果等待期过了没有问题,验证者可以取回保证金和应得奖励。
通过验证者投票达成的Finality有没有可能被推翻?
单纯矿工发动攻击不会推翻Finality。大量的验证者给前后两个有冲突的Finality投票了,如果出现这种情况,至少有1/3的验证者给两边都投票了,一旦发现,这些验证者的保证金会被没收。
为什么以太坊不一开始就用 权益证明?
因为权益证明不是很成熟,工作量证明比较成熟,经过时间检验。比特币和以太坊的算法都经过了bug bounty的检验,没有人发现什么漏洞。EOS加密货币用权益证明的思想,用DPOS协议,先用投票方法选出21个投票节点,然后再由超级节点产生区块。基于权益证明的共识机制目前处于探索状态。
很多人对工作量证明有反感,因为觉得是无用功,白浪费了很多电,但其实挖矿对环境的影响是有限的,挖矿的一个好处是把多余的电能转化为钱的一种手段。
DAO:去中心化的自治组织,建立在代码基础上,规章制度写在代码中,通过区块链共识协议维持这种规章制度的执行。
TheDAO:具体的一个DAO,用来众筹投资项目,本质是一个运行在以太坊上的智能合约,如果要参与TheDAO,可以发以太币给这个智能合约,换回TheDAO的代币。需要决定投资哪个项目,可以通过代币决定,代币越多,权重越大,如果有收益,也按照合约中规章制度决定收益分配。(出于非营利性目的)
DAC:去中心化的自治公司,出于盈利目的。现实中不具有公司的法律地位。
TheDAO只存活了三个月。 TheDAO中要收回收益是通过拆分实现,拆分也是一种建立子基金的方法。如果有少部分人认为投资的项目不好,可以通过拆分独立出来,成立自己的子基金,拆分时手中的代币要被收回去,换成相应数量的以太币。拆分的极端例子就是单个的投资者成立一个子基金,这是投资者取回收益的唯一途径。拆分之前有七天辩论区,讨论拆分好不好,要不要加入,拆分之后有28天锁定期,打入的以太币收益要在28以后才能取出来。
拆分的理念是民主制度的绝对体现。 TheDAO存在时间短的问题出现在拆分 DAO的实现。
把钱还给调用这个函数的人,把TheDAO的数额减少,再把调用者数量清零。正确的操作顺序是先把账户清零,再转账,黑客就是利用这个漏洞,进行重入攻击。黑客利用这个攻击转走了差不多1//3的以太币。
以太坊对heDAO事件有两个方面的讨论,一方面认为要采取补救措施,要进行回滚,保证广大投资者的正当利益,另一方认为不需要采取补救措施,因为黑客的行为没有违反代码中的规则。
TheDAO补救措施
1、回滚分叉攻击。会影响其他区块交易的状态,是不可行的。只能针对黑客进行交易的交易进行回滚,其他发生正常的交易不能受到影响。两步走:1、锁定黑客账户,不允许和黑客账户相关的账户进行交易(大部分节点进行升级-软分叉,升级后有个bug,和gas相关,检查地址错误没有收取gas,然后有大量非法交易,之后这个方法失败了。);2是退钱。硬分叉——把TheDAO的钱强行转到另一个合约上,这个不需要本人同意强制执行,新升级矿工挖到第192万区块自动执行。实现用智能合约投票,大部分人支持硬分叉,最后硬分叉成功,黑客行为没有得到获利。
硬分叉后新链的以太币符号是ETH,旧链上的是ETC(经典以太坊)。刚开始两条链记账本一样,基本 规则大致一样,容易出现重放攻击,后来使用Chain ID区分开来。
无论是软分叉还是硬分叉都是把TheDAO所有账户进行处理,为什么不能针对黑客账户进行处理?
TheDAO智能合约有bug,这次是黑客利用了,如果只针对黑客账户处理,以后可能还会有其他账户这样利用这个bug。所有有BUG的智能合约都是作废了,所以这个TheDAO也最终解体了。