EOS新闻动态

EOS新闻动态

EOS简介,新闻动态更新
EOS技术讨论

EOS技术讨论

EOS, Bitshares, steem, Graphene技术分析
EOS众筹价格

EOS众筹价格

EOS众筹模式,价格讨论
EOS其他相关

EOS其他相关

其他的关于EOS的问题和话题都在这

缺失的白皮书:DPOS共识算法工作原理及鲁棒性根源分析

EOS其他相关郑浩 发表了文章 • 0 个评论 • 18 次浏览 • 4 天前 • 来自相关话题

雷锋网(公众号:雷锋网)按:本文发表于Steem,作者是dantheman。译者是万云首席技术官奚海峰,首发公众号万云BaaS。奚海峰曾任IBM研究院工程师和高级咨询顾问,Sempra Commodities 主管架构师及 Tudor Investment 软件开发主管。在美国12年间,获得了包括“IBM 研究成就奖”在内的多次嘉奖,在一流国际会议和杂志上发表过多篇学术论文,并且持有美国发明专利。雷锋网已获授权转载。

这篇“缺失的白皮书”是对委托权益证明(DPOS)的分析,目的是为DPOS的工作原理及其鲁棒性根源提供一个分析。DPOS的早期描述可以在bitshares.org找到。不过,那个描述还包含了许多不属于实际共识过程的内容。

所有区块链本质上都是一种由交易驱动的确定性状态机。共识是商定确定性交易顺序和过滤无效交易的过程。有许多不同的共识算法都可以产生等效的交易排序,但DPOS已经通过在多个区块链上经年累月的可靠运行证明自身是健壮、安全和有效的。

像所有共识算法一样,块生产者可能导致的最大损害是审查。所有块的有效性必须基于确定性的开源状态机逻辑。

DPOS算法概要

DPOS算法分为两部分:选择一组块生产者和调度生产。选举过程确保利益相关方最终得到控制,因为当网络不能顺利运行时,利益相关方的损失最大。选举方法对实际运行中如何达成共识几乎没有影响,因此,本文将重点介绍如何在块生产者被选择之后达成共识。

为了帮助解释这个算法,我想假设3个块生产者A,B和C。因为共识(的达成)需要2/3+1多数来解决所有情况,这个简化的模型将假设生产者C是打破僵局的那个人。在现实世界中,将有21个或更多的块生产者。像工作量证明一样,一般规则是最长链胜出。任何时候当一个诚实的对等节点看到一个有效的更长链,它都会从当前分叉切换到更长的这条链。

我将举例说明在大多数想得到的网络条件下DPOS如何运行。这些例子应该可以帮助您理解为什么DPOS稳健且难以破坏。

正常操作

在正常操作模式下,块生产者每3秒钟轮流生成一个块。假设没有人错过自己的轮次,那么这将产生最长链。块生产者在被调度轮次之外的任何时间段出块都是无效的。





 
少数分叉

不超过节点总数三分之一的恶意或故障节点可能创建少数分叉。在这种情况下,少数分叉每9秒只能产生一个块,而多数分叉每9秒可以产生两个块。这样,诚实的2/3多数将永远比少数(的链)更长。





 
离线少数的多重生产

(离线的)少数人可以试图产生无限数量的分叉,但是他们的所有分叉都将比多数人的那条链短,因为少数人在出块速度上注定比多数人来的更慢。





 
网络碎片化

网络完全有可能碎片化,导致没有任何分叉拥有多数块生成者。在这种情况下,最长的链将倒向最大的那个少数群体。当网络连通性恢复时,较小的少数群体会自然切换到最长的那条链,明确的共识将恢复。





 
有可能存在这样三个分叉,其中两个最长的分叉长度相同。在这种情况下,第3个(较小)分叉的块生产者重新加入网络时会打破平局。块生产者总数为奇数,因此不可能长时间保持平局。稍后我们还会讲到生产者“洗牌”,它使得出块顺序随机化,从而确保即使是生产者数目相同的两个分叉也会以不同的步长增长,最终导致一个分叉超过另一个。
 
在线少数的多重生产

在这种场景下,少数节点B在其时间段内产生了两个或更多可供选择的块。下一个计划生产者(C)可以选择基于B产生的任何一种方案继续构建链条。一旦如此,这个选择就成为最长的链,而所有选择B1的节点都将切换分叉。少数不良生产者企图广播再多的替代块也无关紧要,它们作为最长链的一部分永远不会超过一轮。
 





 
最后不可逆块

在网络碎片化的情况下,多个分叉都有可能持续不断增长相当长的时间。长远来看最长的链终将获胜,但观察者需要一种确切的手段来判定一个块是否绝对处于增长最快的那条链。这可以通过观察来自2/3+1多数块生产者的确认来决定。

在下图中,块B已被C和A所确认,这代表了2/3+1多数确认,由此我们可以推断没有其它链会比这个更长 – 如果2/3的生产者是诚实的。
 





 
请注意,这个“规则”类似于比特币的6块确认“规则”。一些聪明人也许可以谋划一系列事件使得两个节点(应该是“交易”?)出现在不同的最后不可逆块上。这种边缘案例要求攻击者能完全控制通信延迟,并且在几分钟内两次--而不是一次--使用该控制。即便这真的发生了,那么最长链(胜出)的长期规则仍然适用。我们估计这种攻击的可能性足够接近0,且经济后果无关紧要,因此不足为虑。

生产者法定人数不足

在缺乏明晰的生产者法定人数这种不太可能的情况下,少数人还是可以继续出块。利益相关方可以在这些块里包括更改投票的交易。这些投票可以选出一组新的生产者,并将出块参与率恢复到100%。一旦如此,少数链将最终超过所有其他以低于100%参与率运行的链。


在此过程中,所有观察者都会知道,在一条参与率超过67%的链形成之前,网络状态是不定的。那些选择在此条件下进行交易的人所冒的风险与选择接受不到6个确认的人相似。他们知道存在这样一些小的可能性,即:共识也许最终在一个不同的分叉上建立起来。在实践中,这种情况比接受少于3个比特币交易确认的块要安全多了。

多数生产者舞弊

如果多数生产者变得腐败,那么他们可以产生无限数量的分叉,每个分叉都看起来以2/3多数确认向前走。这种情况下,最后不可逆块算法蜕变为最长链算法。最长链就是为最大多数所批准的那条链,而这将由少数剩下的诚实节点决定。这种行为不会持续很长时间,因为利益相关方最终会投票替换生产者。
 





 
交易作为权益证明(TaPoS)

当用户为一个交易签名时,他们是在对区块链状态的一定假设下这样做的。这个假设是基于他们对最近几个块的看法。如果最长链的共识发生改变,则潜在会使签名者之前的假设失效。


就TaPoS而言,所有交易都包含最近一个块的散列,如果该块在链历史中不存在则这些交易被认为是无效的。任何在孤儿分叉上给交易签名的人,都会发现该交易无效且无法迁移到主分叉。

该过程的一个附带作用是可以抵御试图产生替代链的长期攻击。每个利益相关方在每次交易时都直接对区块链做出确认。随着时间推移,所有的块都是由所有利益相关方确认过的,这在一条伪造链里是无法复制的。

确定性生产者洗牌

在上面所有例子中,我们展示的都是块生产者按循环调度出块。实际上,每出N个块(N是生产者数量),块生产者集合都会洗牌一次。这种随机性确保块生成者B不会总是忽略块生成者A,每当形成多个拥有相同数量生产者的分叉时,平局最终都会被打破。

结论

在每一个我们能想到的自然网络分裂的情况下,委托权益证明都是强健的,甚至在面对相当数量生产者舞弊的情形时也是安全的。不像其它共识算法,当大多数生产者不合格时,DPOS还是可以继续工作。在此过程中,社区可以投票替换掉不合格的生产者,直到恢复100%参与率。我还不知道有任何其它算法可以在如此高强度和变化多端的失败条件下依然保持强健。

说到底,DPOS引人注目的安全性来自于其选择块生产者和验证节点质量的算法。运用赞成投票的过程可以确保一个人即使拥有50%的有效投票权也不能独自挑选哪怕一个生产者。DPOS旨在优化拥有强壮网络连接的诚实节点100%参与(共识过程)的名义条件。这使得DPOS有能力在平均只有1.5秒的时间内以99.9%的确定性确认交易,同时以优雅和可检测的方式降级 – 从降级中恢复正常也不过是小事一桩。

其它共识算法以网络条件差的不诚实节点为名义条件展开设计,这样设计的最终结果就是性能更差、延迟更高、通信开销高的网络,而且这个网络在33%节点失效的情况下会完全停摆。

在BitShares成功运行三年以及在Steem运行一年期间,我们经历了各种各样的网络条件和软件错误。DPOS成功穿行于其间,在处理了比任何其它区块链更多交易的同时持续达成共识,展现了非凡的能力。
 
原文转自雷锋网 查看全部
雷锋网(公众号:雷锋网)按:本文发表于Steem,作者是dantheman。译者是万云首席技术官奚海峰,首发公众号万云BaaS。奚海峰曾任IBM研究院工程师和高级咨询顾问,Sempra Commodities 主管架构师及 Tudor Investment 软件开发主管。在美国12年间,获得了包括“IBM 研究成就奖”在内的多次嘉奖,在一流国际会议和杂志上发表过多篇学术论文,并且持有美国发明专利。雷锋网已获授权转载。

这篇“缺失的白皮书”是对委托权益证明(DPOS)的分析,目的是为DPOS的工作原理及其鲁棒性根源提供一个分析。DPOS的早期描述可以在bitshares.org找到。不过,那个描述还包含了许多不属于实际共识过程的内容。

所有区块链本质上都是一种由交易驱动的确定性状态机。共识是商定确定性交易顺序和过滤无效交易的过程。有许多不同的共识算法都可以产生等效的交易排序,但DPOS已经通过在多个区块链上经年累月的可靠运行证明自身是健壮、安全和有效的。

像所有共识算法一样,块生产者可能导致的最大损害是审查。所有块的有效性必须基于确定性的开源状态机逻辑。

DPOS算法概要

DPOS算法分为两部分:选择一组块生产者和调度生产。选举过程确保利益相关方最终得到控制,因为当网络不能顺利运行时,利益相关方的损失最大。选举方法对实际运行中如何达成共识几乎没有影响,因此,本文将重点介绍如何在块生产者被选择之后达成共识。

为了帮助解释这个算法,我想假设3个块生产者A,B和C。因为共识(的达成)需要2/3+1多数来解决所有情况,这个简化的模型将假设生产者C是打破僵局的那个人。在现实世界中,将有21个或更多的块生产者。像工作量证明一样,一般规则是最长链胜出。任何时候当一个诚实的对等节点看到一个有效的更长链,它都会从当前分叉切换到更长的这条链。

我将举例说明在大多数想得到的网络条件下DPOS如何运行。这些例子应该可以帮助您理解为什么DPOS稳健且难以破坏。

正常操作

在正常操作模式下,块生产者每3秒钟轮流生成一个块。假设没有人错过自己的轮次,那么这将产生最长链。块生产者在被调度轮次之外的任何时间段出块都是无效的。

594d25d40ff4e.jpg

 
少数分叉

不超过节点总数三分之一的恶意或故障节点可能创建少数分叉。在这种情况下,少数分叉每9秒只能产生一个块,而多数分叉每9秒可以产生两个块。这样,诚实的2/3多数将永远比少数(的链)更长。

594d25e0ef536.jpg

 
离线少数的多重生产

(离线的)少数人可以试图产生无限数量的分叉,但是他们的所有分叉都将比多数人的那条链短,因为少数人在出块速度上注定比多数人来的更慢。

594d25ed4afbb.jpg

 
网络碎片化

网络完全有可能碎片化,导致没有任何分叉拥有多数块生成者。在这种情况下,最长的链将倒向最大的那个少数群体。当网络连通性恢复时,较小的少数群体会自然切换到最长的那条链,明确的共识将恢复。

594d2608b7c7c.jpg

 
有可能存在这样三个分叉,其中两个最长的分叉长度相同。在这种情况下,第3个(较小)分叉的块生产者重新加入网络时会打破平局。块生产者总数为奇数,因此不可能长时间保持平局。稍后我们还会讲到生产者“洗牌”,它使得出块顺序随机化,从而确保即使是生产者数目相同的两个分叉也会以不同的步长增长,最终导致一个分叉超过另一个。
 
在线少数的多重生产

在这种场景下,少数节点B在其时间段内产生了两个或更多可供选择的块。下一个计划生产者(C)可以选择基于B产生的任何一种方案继续构建链条。一旦如此,这个选择就成为最长的链,而所有选择B1的节点都将切换分叉。少数不良生产者企图广播再多的替代块也无关紧要,它们作为最长链的一部分永远不会超过一轮。
 

594d26176c8a2.jpg

 
最后不可逆块

在网络碎片化的情况下,多个分叉都有可能持续不断增长相当长的时间。长远来看最长的链终将获胜,但观察者需要一种确切的手段来判定一个块是否绝对处于增长最快的那条链。这可以通过观察来自2/3+1多数块生产者的确认来决定。

在下图中,块B已被C和A所确认,这代表了2/3+1多数确认,由此我们可以推断没有其它链会比这个更长 – 如果2/3的生产者是诚实的。
 

594d262e2719c.jpg

 
请注意,这个“规则”类似于比特币的6块确认“规则”。一些聪明人也许可以谋划一系列事件使得两个节点(应该是“交易”?)出现在不同的最后不可逆块上。这种边缘案例要求攻击者能完全控制通信延迟,并且在几分钟内两次--而不是一次--使用该控制。即便这真的发生了,那么最长链(胜出)的长期规则仍然适用。我们估计这种攻击的可能性足够接近0,且经济后果无关紧要,因此不足为虑。

生产者法定人数不足

在缺乏明晰的生产者法定人数这种不太可能的情况下,少数人还是可以继续出块。利益相关方可以在这些块里包括更改投票的交易。这些投票可以选出一组新的生产者,并将出块参与率恢复到100%。一旦如此,少数链将最终超过所有其他以低于100%参与率运行的链。


在此过程中,所有观察者都会知道,在一条参与率超过67%的链形成之前,网络状态是不定的。那些选择在此条件下进行交易的人所冒的风险与选择接受不到6个确认的人相似。他们知道存在这样一些小的可能性,即:共识也许最终在一个不同的分叉上建立起来。在实践中,这种情况比接受少于3个比特币交易确认的块要安全多了。

多数生产者舞弊

如果多数生产者变得腐败,那么他们可以产生无限数量的分叉,每个分叉都看起来以2/3多数确认向前走。这种情况下,最后不可逆块算法蜕变为最长链算法。最长链就是为最大多数所批准的那条链,而这将由少数剩下的诚实节点决定。这种行为不会持续很长时间,因为利益相关方最终会投票替换生产者。
 

594d2630cbd99.jpg

 
交易作为权益证明(TaPoS)

当用户为一个交易签名时,他们是在对区块链状态的一定假设下这样做的。这个假设是基于他们对最近几个块的看法。如果最长链的共识发生改变,则潜在会使签名者之前的假设失效。


就TaPoS而言,所有交易都包含最近一个块的散列,如果该块在链历史中不存在则这些交易被认为是无效的。任何在孤儿分叉上给交易签名的人,都会发现该交易无效且无法迁移到主分叉。

该过程的一个附带作用是可以抵御试图产生替代链的长期攻击。每个利益相关方在每次交易时都直接对区块链做出确认。随着时间推移,所有的块都是由所有利益相关方确认过的,这在一条伪造链里是无法复制的。

确定性生产者洗牌

在上面所有例子中,我们展示的都是块生产者按循环调度出块。实际上,每出N个块(N是生产者数量),块生产者集合都会洗牌一次。这种随机性确保块生成者B不会总是忽略块生成者A,每当形成多个拥有相同数量生产者的分叉时,平局最终都会被打破。

结论

在每一个我们能想到的自然网络分裂的情况下,委托权益证明都是强健的,甚至在面对相当数量生产者舞弊的情形时也是安全的。不像其它共识算法,当大多数生产者不合格时,DPOS还是可以继续工作。在此过程中,社区可以投票替换掉不合格的生产者,直到恢复100%参与率。我还不知道有任何其它算法可以在如此高强度和变化多端的失败条件下依然保持强健。

说到底,DPOS引人注目的安全性来自于其选择块生产者和验证节点质量的算法。运用赞成投票的过程可以确保一个人即使拥有50%的有效投票权也不能独自挑选哪怕一个生产者。DPOS旨在优化拥有强壮网络连接的诚实节点100%参与(共识过程)的名义条件。这使得DPOS有能力在平均只有1.5秒的时间内以99.9%的确定性确认交易,同时以优雅和可检测的方式降级 – 从降级中恢复正常也不过是小事一桩。

其它共识算法以网络条件差的不诚实节点为名义条件展开设计,这样设计的最终结果就是性能更差、延迟更高、通信开销高的网络,而且这个网络在33%节点失效的情况下会完全停摆。

在BitShares成功运行三年以及在Steem运行一年期间,我们经历了各种各样的网络条件和软件错误。DPOS成功穿行于其间,在处理了比任何其它区块链更多交易的同时持续达成共识,展现了非凡的能力。
 
原文转自雷锋网

从BM和V神互怼中,深入对比PoW和DPoS的共识机制!

EOS其他相关郑浩 发表了文章 • 0 个评论 • 16 次浏览 • 4 天前 • 来自相关话题

BM和V神都是区块链界中星光熠熠的天才明星。


Vitalik Buterin,以太坊(Ethereum)项目的创始人,币圈人称“小神童”、“V神”、“维维”。如今,Vitalik已然成为了币圈及链圈内最耀眼的人物之一。


Daniel larimer,币圈人称BM(bytemaster),比特股(BitShares)、Steem以及EOS项目的创始人,BM是区块链界中极少数的连续创业者,比特股(BitShares)、Steem这两个项目已成功运行。


今年8月份时媒体写了BM和V神互怼的文,我仔细分析,在他们的互怼中的最核心都是在怼PoW和DPoS这两种共识机制在去中心化,治理能力,资源费用,预防DOS攻击,共识周期等这几方面的对比。


1.PoW和DPoS,谁更中心化?


PoW






这是以太坊的区块生产节点分布图。你可以看到,两个矿池控制了51%的哈希算力,它们可以任意忽视其它所有矿池生产的区块,其中7个节点的哈希算力就达到了整个网络的90%。


而且,以太坊的完全节点也都是经过加强的,普通大众根本承受不起。所以,几乎所有的轻客户端根本不需要操心默克尔证明的问题,虽然Vitalik说默克尔证明多么的有价值。


在以太坊,他们单方面地制定决策,比如在DAO事件上;由于这个决策是由少数人制定的,没有大众参与,这就给予了内部人士不对等的交易机会。在这件事上,代码并非法律,操作者们才是。


PoW挖矿这种模式,比多数上市公司还中心化;硬件和电力现在都很便宜,这意味着矿池在投票权上是处于垄断地位的;现在比特币和以太坊都是这样。


当你把利益不同的人绑定到一起,不让代币持有人投票,由PoW导致的中心化,最终的结局就是寡头统治,而他们是不会对他们的行为负责任的。


如果你不允许代币持有人投票,这就表示你把受益者和决策制定者分开了。这样的话,制定出来的决策或许并不符合代币持有者的最大利益。比特币拓展的问题上看到过这一幕,数年来,矿工们控制了网络,收取高额费用。


投票的人并不是最后结果的直接受益者---这就是现在比特币和以太坊的组织方式。


DPoS


比特股、Steemit 以及EOS所使用的底层框架是石墨烯框架。石墨烯框架采用DPoS共识算法,平均出块速度1.5秒,出块节点(见证人)由持币用户选举投票产生,每个用户的投票权重则按照用户持币占系统总量比例计算。


全网持有代币的人可以通过投票系统来选择区块生产者,一旦当选任何人都可以参与区块的生产。


以EOS为例,预计每3秒生产一个区块。任何时刻,只有一个生产者被授权产生区块。如果在某个时间内没有成功出块,则跳过该块。


EOS架构中区块产生是以21个区块为一个周期。在每个出块周期开始时,21个区块生产者会被投票选出。前20名出块者首选自动选出,第21个出块者按所得投票数目对应概率选出。所选择的生产者会根据从块时间导出的伪随机数进行混合。以便保证出块者之间的连接尽量平衡。


事实是,对于矿工(节点提供者)来说,比特币和以太坊都比DPoS区块链更中心化。


2.治理能力对比


在PoW的共识机制下,矿工,Casper staker,矿池,股权池,基金会,完全节点,交易所都想占主导,而那些个人持币者却没有发言权。外部观察者根本无法知道这个特别委员会是否取得了共识。人们也就不确定共识的步骤是什么。


比如在ETC和BCC这些分叉,都是基金会和矿池组织双方的博弈,而我们这些个人持币者只是被通知的角色,是无参与决策权的。这样的治理算法则会导致特别委员会的治理模式,社区作出的决定会令个人持币者感到模糊不清的。


在DPoS模式下,治理的结构是清晰的,所有的股东都有发言权。这种治理的成本与共识过程是一致的,每个人都能知道治理的政策是什么,也知道他们该怎么参与。制定决策的时候,就很清楚,不会有二义性。不会有“意外分叉”,因为区块链很清楚新的硬分叉路径,旧的节点共识会通知他们“关停”,除非他们升级了。


在正常情况下,DPOS块链不会经历任何叉,因为块生产者合作生产区块而不是竞争。如果有区块分叉,共识将自动切换到最长的链条。具有更多生产者的区块链长度将比具有较少生产者的区块链增长速度更快。此外,没有块生产者应该同时在两个区块链分叉上生产块。如果一个块生产者发现这么做了,就可能被投票出局。


Bitshares成功运行了3年多,Steem也成功了1年多,性能达到每秒上千笔交易量,它们能降低交易费,还能进行19次无缝硬分叉,而这都归功于DPoS治理能力。


然而比特币和以太坊不久的将来还会面临分叉的问题。或许未来存在一种方法,能把矿工,股东,矿池,基金,完全节点,交易所和商标持有人聚到一起取得共识,然后强制他们遵守这个统一的治理架构。然而,现在还没有这种方案出现。


3.能源利用对比


PoW的核心要义为:算力越大,挖到块的概率越大,维护区块链安全的权重越大。相对其他共识机制而言,PoW逻辑简单,容易实现,容错达50%,其安全有严格的数学论证。但PoW最大的问题之一,被指责最多是浪费能源。


比特币和以太坊每年收集了40到50亿美金,他们把这些资金花在了挖矿的电力资源上,这些消耗的电力资源比一些小国家的都多;


在DPoS共识机制比特股,Steem和EOS的应用程序不需要用户为区块链上的操作支付费用。像传统的基于Web的应用程序一样,应用程序开发人员提供程序运行需要的资源,而不是由用户提供。


这些资源包括带宽、计算力、存储容量等。这意味着用户可以创建免费的区块链应用程序,新用户无需经历繁琐的加密数字货币购买流程,就可直接使用区块链上的应用程序。


可以免费使用的区块链平台自然可能会得到更多的关注。有了足够的用户规模,开发者和企业可以创建对应的盈利模式。


在DPoS中,那些原本要被浪费掉的四五十亿美元将会被代币持有人编入预算,代币持有人能以最有利于网络的方式来使用这笔资金。


4.共识周期长短对比


PoW机制最大的问题之一是的共识达成的周期较长,比特币每秒只能最多交易7笔交易,以太坊是每秒13笔左右,这样的交易量无法取代现有的商业应用。


相对于现实的以现有的应用程序,比如:交易所和Ebay,Uber,AirBnB和Facebook这些社交媒体为例;这些应用每天需要能够处理数千万日活跃用户提供服务,每秒平均需处理的事件高达数十万条。


基于石墨烯底层DPoS的已运行了三年的比特股和运行一年的Steem已实力证明可以达到1.5秒的平均确认速度和有限条件下实测3300笔的数据吞吐量;


而EOS将通过并行链的方式,最高将可以达到每秒数百万笔,并且并行本地链甚至将可以达到毫秒级的确认速度。


5.预防DOS攻击


事实是以太坊和比特币都遭受过DOS攻击,而Steem和Bitshares则运行良好。正如上图显示的那样,以太坊中7个节点的哈希算力就达到了整个网络的90%,把这7个节点拿掉,就能轻松摧毁以太坊。


总结:


通过以上几方面的对比,DPoS比PoW的优势明显,但这两种机制还存在最大的问题在于没有所谓的“最终确认”。


当获得一个区块确认时,只能代表交易有99%的可能性受到区块链的认可,当获得两个确认时,信心值会增高到99.9%的可能,当获得6个确认时,信心值可能会提升到99.9……9%,所有的确认都只是一个概率上的表达,而不是一个确定性的事情,理论上有可能存在其他攻击影响。


现在区块链上数字资产的应用越来越多来源于真实世界或金融资产,对交易的最终确认有很高的要求,需要有不同的共识机制。


共识机制是区块链的核心技术,现在各种区块链共识机制的选择是认为至今为止的相对的最优选择;当未来区块链技术越来越多应用于现实,未来将会不断有所改进,以切合实际的需要。


未来已来,只是尚未流行!

让我们跟随区块链的浪潮,共同穿越未来!!

作者:Ann729
链接:http://www.jianshu.com/p/ed5a3d766e5d
來源:简书
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

  查看全部
BM和V神都是区块链界中星光熠熠的天才明星。


Vitalik Buterin,以太坊(Ethereum)项目的创始人,币圈人称“小神童”、“V神”、“维维”。如今,Vitalik已然成为了币圈及链圈内最耀眼的人物之一。


Daniel larimer,币圈人称BM(bytemaster),比特股(BitShares)、Steem以及EOS项目的创始人,BM是区块链界中极少数的连续创业者,比特股(BitShares)、Steem这两个项目已成功运行。


今年8月份时媒体写了BM和V神互怼的文,我仔细分析,在他们的互怼中的最核心都是在怼PoW和DPoS这两种共识机制在去中心化,治理能力,资源费用,预防DOS攻击,共识周期等这几方面的对比。


1.PoW和DPoS,谁更中心化?


PoW

4124900-9c5b076d6946f381.png


这是以太坊的区块生产节点分布图。你可以看到,两个矿池控制了51%的哈希算力,它们可以任意忽视其它所有矿池生产的区块,其中7个节点的哈希算力就达到了整个网络的90%。


而且,以太坊的完全节点也都是经过加强的,普通大众根本承受不起。所以,几乎所有的轻客户端根本不需要操心默克尔证明的问题,虽然Vitalik说默克尔证明多么的有价值。


在以太坊,他们单方面地制定决策,比如在DAO事件上;由于这个决策是由少数人制定的,没有大众参与,这就给予了内部人士不对等的交易机会。在这件事上,代码并非法律,操作者们才是。


PoW挖矿这种模式,比多数上市公司还中心化;硬件和电力现在都很便宜,这意味着矿池在投票权上是处于垄断地位的;现在比特币和以太坊都是这样。


当你把利益不同的人绑定到一起,不让代币持有人投票,由PoW导致的中心化,最终的结局就是寡头统治,而他们是不会对他们的行为负责任的。


如果你不允许代币持有人投票,这就表示你把受益者和决策制定者分开了。这样的话,制定出来的决策或许并不符合代币持有者的最大利益。比特币拓展的问题上看到过这一幕,数年来,矿工们控制了网络,收取高额费用。


投票的人并不是最后结果的直接受益者---这就是现在比特币和以太坊的组织方式。


DPoS


比特股、Steemit 以及EOS所使用的底层框架是石墨烯框架。石墨烯框架采用DPoS共识算法,平均出块速度1.5秒,出块节点(见证人)由持币用户选举投票产生,每个用户的投票权重则按照用户持币占系统总量比例计算。


全网持有代币的人可以通过投票系统来选择区块生产者,一旦当选任何人都可以参与区块的生产。


以EOS为例,预计每3秒生产一个区块。任何时刻,只有一个生产者被授权产生区块。如果在某个时间内没有成功出块,则跳过该块。


EOS架构中区块产生是以21个区块为一个周期。在每个出块周期开始时,21个区块生产者会被投票选出。前20名出块者首选自动选出,第21个出块者按所得投票数目对应概率选出。所选择的生产者会根据从块时间导出的伪随机数进行混合。以便保证出块者之间的连接尽量平衡。


事实是,对于矿工(节点提供者)来说,比特币和以太坊都比DPoS区块链更中心化。


2.治理能力对比


在PoW的共识机制下,矿工,Casper staker,矿池,股权池,基金会,完全节点,交易所都想占主导,而那些个人持币者却没有发言权。外部观察者根本无法知道这个特别委员会是否取得了共识。人们也就不确定共识的步骤是什么。


比如在ETC和BCC这些分叉,都是基金会和矿池组织双方的博弈,而我们这些个人持币者只是被通知的角色,是无参与决策权的。这样的治理算法则会导致特别委员会的治理模式,社区作出的决定会令个人持币者感到模糊不清的。


在DPoS模式下,治理的结构是清晰的,所有的股东都有发言权。这种治理的成本与共识过程是一致的,每个人都能知道治理的政策是什么,也知道他们该怎么参与。制定决策的时候,就很清楚,不会有二义性。不会有“意外分叉”,因为区块链很清楚新的硬分叉路径,旧的节点共识会通知他们“关停”,除非他们升级了。


在正常情况下,DPOS块链不会经历任何叉,因为块生产者合作生产区块而不是竞争。如果有区块分叉,共识将自动切换到最长的链条。具有更多生产者的区块链长度将比具有较少生产者的区块链增长速度更快。此外,没有块生产者应该同时在两个区块链分叉上生产块。如果一个块生产者发现这么做了,就可能被投票出局。


Bitshares成功运行了3年多,Steem也成功了1年多,性能达到每秒上千笔交易量,它们能降低交易费,还能进行19次无缝硬分叉,而这都归功于DPoS治理能力。


然而比特币和以太坊不久的将来还会面临分叉的问题。或许未来存在一种方法,能把矿工,股东,矿池,基金,完全节点,交易所和商标持有人聚到一起取得共识,然后强制他们遵守这个统一的治理架构。然而,现在还没有这种方案出现。


3.能源利用对比


PoW的核心要义为:算力越大,挖到块的概率越大,维护区块链安全的权重越大。相对其他共识机制而言,PoW逻辑简单,容易实现,容错达50%,其安全有严格的数学论证。但PoW最大的问题之一,被指责最多是浪费能源。


比特币和以太坊每年收集了40到50亿美金,他们把这些资金花在了挖矿的电力资源上,这些消耗的电力资源比一些小国家的都多;


在DPoS共识机制比特股,Steem和EOS的应用程序不需要用户为区块链上的操作支付费用。像传统的基于Web的应用程序一样,应用程序开发人员提供程序运行需要的资源,而不是由用户提供。


这些资源包括带宽、计算力、存储容量等。这意味着用户可以创建免费的区块链应用程序,新用户无需经历繁琐的加密数字货币购买流程,就可直接使用区块链上的应用程序。


可以免费使用的区块链平台自然可能会得到更多的关注。有了足够的用户规模,开发者和企业可以创建对应的盈利模式。


在DPoS中,那些原本要被浪费掉的四五十亿美元将会被代币持有人编入预算,代币持有人能以最有利于网络的方式来使用这笔资金。


4.共识周期长短对比


PoW机制最大的问题之一是的共识达成的周期较长,比特币每秒只能最多交易7笔交易,以太坊是每秒13笔左右,这样的交易量无法取代现有的商业应用。


相对于现实的以现有的应用程序,比如:交易所和Ebay,Uber,AirBnB和Facebook这些社交媒体为例;这些应用每天需要能够处理数千万日活跃用户提供服务,每秒平均需处理的事件高达数十万条。


基于石墨烯底层DPoS的已运行了三年的比特股和运行一年的Steem已实力证明可以达到1.5秒的平均确认速度和有限条件下实测3300笔的数据吞吐量;


而EOS将通过并行链的方式,最高将可以达到每秒数百万笔,并且并行本地链甚至将可以达到毫秒级的确认速度。


5.预防DOS攻击


事实是以太坊和比特币都遭受过DOS攻击,而Steem和Bitshares则运行良好。正如上图显示的那样,以太坊中7个节点的哈希算力就达到了整个网络的90%,把这7个节点拿掉,就能轻松摧毁以太坊。


总结:


通过以上几方面的对比,DPoS比PoW的优势明显,但这两种机制还存在最大的问题在于没有所谓的“最终确认”。


当获得一个区块确认时,只能代表交易有99%的可能性受到区块链的认可,当获得两个确认时,信心值会增高到99.9%的可能,当获得6个确认时,信心值可能会提升到99.9……9%,所有的确认都只是一个概率上的表达,而不是一个确定性的事情,理论上有可能存在其他攻击影响。


现在区块链上数字资产的应用越来越多来源于真实世界或金融资产,对交易的最终确认有很高的要求,需要有不同的共识机制。


共识机制是区块链的核心技术,现在各种区块链共识机制的选择是认为至今为止的相对的最优选择;当未来区块链技术越来越多应用于现实,未来将会不断有所改进,以切合实际的需要。


未来已来,只是尚未流行!

让我们跟随区块链的浪潮,共同穿越未来!!

作者:Ann729
链接:http://www.jianshu.com/p/ed5a3d766e5d
來源:简书
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

 

【翻译】EOS vs Ethereum - 泰坦之战(中文版)

EOS其他相关郑浩 发表了文章 • 0 个评论 • 14 次浏览 • 4 天前 • 来自相关话题

原文地址: eos-vs-ethereum-clash-of-the-titans
author: @mohit18jan
 
近日,Dan Larimer与eos.io团队宣布开发一个共识区块链操作系统-EOS ,为应用开发者提供数据库,账户权限,调度,账户认证以及应用间通讯等功能。

自EOS代币发售以来,经常有人对EOS与Ethereum之间进行比较。EOS和Ethereum都是去中心化的智能合约平台,允许用户开发去中心化的应用(dapps).

Ethereum是迄今为止规模最大也最成功的去中心化应用平台,但是也有其限制。Vitalik Buterin最近在 Reddit’s Ethereum 交易社区的一篇帖子之中承认“Ethereum可扩展性很操蛋;区块链的底层设计存在瓶颈,单个节点上,必须对整个网络之中的每一笔交易都要进行处理”。

不过,在EOS和Ethereum的设计和愿景上存在诸多差异,我们看一下其中的一些区别:






 
EOS

委托股权证明机制(DPOS)
损坏程序的修复机制(冻结和修复损坏或冻结的程序)
无多条区块链分叉的风险
用具有合法约束力的区块链宪法,建立共同的司法管辖.
为开发者提供全套的加密和区块链通讯功能,使得开发者能够专注于商业逻辑的功能开发.
通过横向和纵向的扩展,可以让EOS网络处理能力达到每秒处理上百万笔交易.
可以支持数千个工业规模的去中心化应用
对单个app的拒绝服务(DoS)攻击,不会让整个网络中断.
零交易费用,除了初始的EOS代币外,开发者无其它成本







 
Ethereum

工作量证明机制,计划向POS/POW混合机制迁移
失败和损坏的程序,会造成投资损失,或者区块链硬分叉(DAO程序的失败,导致了ETH和ETC的分叉)
修复一个损坏的程序,需要中断整个网络
前期测试网络的处理能力是25笔交易每秒,经过优化之后,可能达到每秒50或100笔交易.
Vitalik Buterin提出了无限扩容路线图,通过数据库切片的方式来实现,该扩容方式具有技术难度,正在进行开发。
暴涨的交易量通常会让整个网络冻结拥堵.
每一次计算,存储操作和带宽占用,都需要消耗Gas费.



EOS认为,不同的应用中,往往需要同样类型的功能.他们希望能够提供这些功能,如加密和app/区块链通讯工具,很多应用都会用到。EOS以区块链的形式提供了一套完整的工具包,使得开发者只需专注于应用的开发即可.举个例子,假如所有的手机制造商都需要自己创造一个如安卓或者IOS的操作系统,那么,手机制造商的数量将会剧烈减少.

原理和管理机制

以太坊网络当前对工作证明机制的实现存在一个问题,即修复损坏的程序是很困难的.DAO出现了致命的bug,被黑客攻击而项目破产,使得以太坊网络分裂为ETC和ETH.

如果再有这样的情况,某个存在缺陷的合约导致了数百万美元的损失,又该如何应对?Vitalik Buterin和其他以太坊社区的领导者,需要进行另外一次硬分叉么?再弄出一个Ethereum Class Two,或者其它的支链么?

另外,存在缺陷的智能合约,曾导致一家加拿大数字货币交易所QuadrigaCX,损失了超过价值一千万美元的以太币.因此,如果以太坊上面智能合约存在漏洞,要么会导致投资者损失,要么导致硬分叉,中断整个网络.

EOS可以冻结和修复有问题的应用。如果在你的应用之中存在缺陷-社区可以冻结该应用,部署修复代码,而不需要中断整个网络。简而言之,在EOS上硬分叉会被当做常规事务一样的处理。

可扩展性--规则颠覆者?

Dan在2017共识大会上所做的EOS展示,重点强调几个消费者服务的处理能力,能够达到数千笔交易每秒。对区块链应用的大规模应用而言,可扩展性是异常重要的。

在Ethereum上,早期的测试网络达到了25笔交易每秒(在一些优化的条件下), 经过优化,有可能达到50或100笔交易每秒. 对于金融机构和社交网络等大型的去中心化应用来说,这种处理速度远远不够。
Vitalik Buterin提出了一个“无限扩容”路线图,开发周期为两年,严重依赖数据库切片技术。

切片概念是指将数据库分割为更小的部分,叫做"shards",然后在分散的服务器上传播这些切片.

虽然由于存在复杂的技术限制,对该方案存在种种疑虑,不过,如果该方案成功,可以预期,Ethereum将会继续享受作为区块链智能合约平台的先发优势。

EOS会利用纵向与横向扩容技术,使得区块链的扩展能力,可能达到每秒处理数百万笔交易的级别。它依赖于一项叫做石墨烯(Graphene)的可靠技术, 在压力测试中,该技术能够实现每秒钟10,00-100,000笔交易的处理能力。通过纵向和横向扩展,实现每秒钟数百万笔交易的处理量,还是有可能的。

结论:

谁是胜利者?还未知晓!

我相信,两者都是很重要的技术,可以共存(像Windows和Mac那样)。然而,在从零开始构建商业级别的区块链应用时,EOS更有优势。这篇文章略微偏向EOS,毕竟,每篇文章都会不可避免的带有作者的看法和信念。

备注: 本人并不持有EOS或Ethereum代币,本文中的信息不可被视作投资建议

作者:shuke0327
链接:http://www.jianshu.com/p/10ea3a5f1b5e
來源:简书
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
  查看全部
原文地址: eos-vs-ethereum-clash-of-the-titans
author: @mohit18jan
 
近日,Dan Larimer与eos.io团队宣布开发一个共识区块链操作系统-EOS ,为应用开发者提供数据库,账户权限,调度,账户认证以及应用间通讯等功能。

自EOS代币发售以来,经常有人对EOS与Ethereum之间进行比较。EOS和Ethereum都是去中心化的智能合约平台,允许用户开发去中心化的应用(dapps).

Ethereum是迄今为止规模最大也最成功的去中心化应用平台,但是也有其限制。Vitalik Buterin最近在 Reddit’s Ethereum 交易社区的一篇帖子之中承认“Ethereum可扩展性很操蛋;区块链的底层设计存在瓶颈,单个节点上,必须对整个网络之中的每一笔交易都要进行处理”。

不过,在EOS和Ethereum的设计和愿景上存在诸多差异,我们看一下其中的一些区别:


DQmcCXL82K7Fa8BXJBeLCYGJf1MyerTiyfeXwtkCe7wiTiw_1680x8400.png

 
EOS


委托股权证明机制(DPOS)
损坏程序的修复机制(冻结和修复损坏或冻结的程序)
无多条区块链分叉的风险
用具有合法约束力的区块链宪法,建立共同的司法管辖.
为开发者提供全套的加密和区块链通讯功能,使得开发者能够专注于商业逻辑的功能开发.
通过横向和纵向的扩展,可以让EOS网络处理能力达到每秒处理上百万笔交易.
可以支持数千个工业规模的去中心化应用
对单个app的拒绝服务(DoS)攻击,不会让整个网络中断.
零交易费用,除了初始的EOS代币外,开发者无其它成本




DQmUpKZ1aG2jX5qB8mfVCj3yopCtzhZxHgcgXWDhsNp9QJK_1680x8400.png

 
Ethereum


工作量证明机制,计划向POS/POW混合机制迁移
失败和损坏的程序,会造成投资损失,或者区块链硬分叉(DAO程序的失败,导致了ETH和ETC的分叉)
修复一个损坏的程序,需要中断整个网络
前期测试网络的处理能力是25笔交易每秒,经过优化之后,可能达到每秒50或100笔交易.
Vitalik Buterin提出了无限扩容路线图,通过数据库切片的方式来实现,该扩容方式具有技术难度,正在进行开发。
暴涨的交易量通常会让整个网络冻结拥堵.
每一次计算,存储操作和带宽占用,都需要消耗Gas费.




EOS认为,不同的应用中,往往需要同样类型的功能.他们希望能够提供这些功能,如加密和app/区块链通讯工具,很多应用都会用到。EOS以区块链的形式提供了一套完整的工具包,使得开发者只需专注于应用的开发即可.举个例子,假如所有的手机制造商都需要自己创造一个如安卓或者IOS的操作系统,那么,手机制造商的数量将会剧烈减少.

原理和管理机制

以太坊网络当前对工作证明机制的实现存在一个问题,即修复损坏的程序是很困难的.DAO出现了致命的bug,被黑客攻击而项目破产,使得以太坊网络分裂为ETC和ETH.

如果再有这样的情况,某个存在缺陷的合约导致了数百万美元的损失,又该如何应对?Vitalik Buterin和其他以太坊社区的领导者,需要进行另外一次硬分叉么?再弄出一个Ethereum Class Two,或者其它的支链么?

另外,存在缺陷的智能合约,曾导致一家加拿大数字货币交易所QuadrigaCX,损失了超过价值一千万美元的以太币.因此,如果以太坊上面智能合约存在漏洞,要么会导致投资者损失,要么导致硬分叉,中断整个网络.

EOS可以冻结和修复有问题的应用。如果在你的应用之中存在缺陷-社区可以冻结该应用,部署修复代码,而不需要中断整个网络。简而言之,在EOS上硬分叉会被当做常规事务一样的处理。

可扩展性--规则颠覆者?

Dan在2017共识大会上所做的EOS展示,重点强调几个消费者服务的处理能力,能够达到数千笔交易每秒。对区块链应用的大规模应用而言,可扩展性是异常重要的。

在Ethereum上,早期的测试网络达到了25笔交易每秒(在一些优化的条件下), 经过优化,有可能达到50或100笔交易每秒. 对于金融机构和社交网络等大型的去中心化应用来说,这种处理速度远远不够。
Vitalik Buterin提出了一个“无限扩容”路线图,开发周期为两年,严重依赖数据库切片技术。

切片概念是指将数据库分割为更小的部分,叫做"shards",然后在分散的服务器上传播这些切片.

虽然由于存在复杂的技术限制,对该方案存在种种疑虑,不过,如果该方案成功,可以预期,Ethereum将会继续享受作为区块链智能合约平台的先发优势。

EOS会利用纵向与横向扩容技术,使得区块链的扩展能力,可能达到每秒处理数百万笔交易的级别。它依赖于一项叫做石墨烯(Graphene)的可靠技术, 在压力测试中,该技术能够实现每秒钟10,00-100,000笔交易的处理能力。通过纵向和横向扩展,实现每秒钟数百万笔交易的处理量,还是有可能的。

结论:

谁是胜利者?还未知晓!

我相信,两者都是很重要的技术,可以共存(像Windows和Mac那样)。然而,在从零开始构建商业级别的区块链应用时,EOS更有优势。这篇文章略微偏向EOS,毕竟,每篇文章都会不可避免的带有作者的看法和信念。

备注: 本人并不持有EOS或Ethereum代币,本文中的信息不可被视作投资建议

作者:shuke0327
链接:http://www.jianshu.com/p/10ea3a5f1b5e
來源:简书
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
 

BM采访实录:EOS去中心化的操作系统

EOS其他相关郑浩 发表了文章 • 0 个评论 • 14 次浏览 • 4 天前 • 来自相关话题

视频来源:https://www.youtube.com/watch?v=eftctVXiFJQ

译者:汪涛,原载于其公众号 反求诸己  ,这篇是2017年8月23号,Dan 接受采访的翻译。





 

Q: 我们对你如何进入这个区块链世界非常感兴趣,你怎么接触到区块链和比特币的


A: 很久之前,我开始在对我自己的生活每方面都提问,希望得到生活的真相。我掉进了自由市场(free markets)和奥地利经济学(Austrian economics)的兔子洞。我意识到,我想创建这样的一个系统,通过非暴力的方式给予我们自由。然后我就给我的人生设置了一个目标,为自由市场提供解决方案,从而保证生命和财产的自由。

为了保证生命和财产的自由,我们需要一些不能被打印被控制的钱。所以我想找到一些金和银的替代品,因为,他们不是很容易的运输与携带。大概是2009年,我正好发现了bitcoin,那时的btc,还可以在普通的电脑上挖出一个完整的区块。所以我在这个行业里非常的久了。

在2013年,在门头沟的美国账户,被美国政府给控制了的时候。我意识到所有的这些交易所,都是很容易受到攻击的。很有可能政府会关闭交易所,可能会切断交易所的现金流,这是为什么我站出来要创建 bts,一个去中心化的交易所,主要功能是锚定资产可以跟随,金,银,美元,人民币。然后可以用这些锚定资产再去交易数字资产。

当我在建设这样的一个去中心化的交易所的时候,我意识到区块链科技不能满足需求,比特币10分钟出一个块对于交易来说是不能接受的。2013-2015,我创建了bts1和bts2.0,bts 是第一个区块链可以做到每秒万次交易的区块链,我在过去的几年,都是在把区块链的性能推向现实世界实际的性能要求。bts也是第一个拥有账户系统,和内在治理系统的区块链。人们实际上被区块链所雇佣。实际上是把浪费在挖矿上的价值用于价值再生产,然后把产生的价值在返还给token。

这是我对bts所做的事情,bts到现在还是有没有大规模使用的问题,还是很难说服很多人在一条区块链上去完成交易。还有交易手续费,你有一个去中心化的交易所,当你创建买单或者取消买单的时候都会向你收费,这些都是bts普及的障碍。

当我们在区块链萧条的时候,我们也用光了bts筹集来的开发资金。之后我想出了一个主意,做一个区块链上的社交网络,我们会奖赏那些生产内容的用户,然后这些内容会自然的吸引流量,比如从google。这样吸引新的用户不会有任何的花费。这可能是第一条区块链,让你可以通过贡献你的工作,你的内容来让token增值,而不需要贡献任何的金钱。

steemit 是一个区块奖励系统的试验。比特币只有少数矿工才能够拿到奖励,十万人可以每天得到区块链的奖励,这意味着,分配奖励的工作需要去中心化。在bts中,必须所有的投票者都同意,用户才能得到奖励,这个过程是非常困难的,非常政治的。我们把分配奖励的决定权,降权到一个非常低的级别。让每个人都可以通过点赞这个操作,来让区块链释放一部分的奖赏。到目前为止 ,steemit非常成功,在一年之内 已经是全球的前2000家的网站。这个帮助许多人接触到了区块链科技,也在区块链的架构方面帮助了我很多。

在完成了bts,和steemit 之后,我意识到,这两个应用有许多东西是一致的,其他大量的应用,可以通过继承相同的账户系统,账户恢复,高性能,steem 和 bts 都是业界的顶尖性能。这两个区块链加起来的区块量,超过整个市场半数以上。在 steem 我们让大部分的操作免费起来,因为用户不会想因为点赞付费,他们只会为发表或评论这样的动作付费。现在我的工作转移到了eos,eos是相当于把所有的事情放到了一起。提供每个人都可以使用的一个编程环境。


 

Q:这是非常影响深刻的一个简介 ,每个人都会被你过去做的大量工作所震惊,但是我们好奇的是是什么你从bitshare,迁移到 steemit,再迁移到eos。


A:我学到的最大教训是,当我学习到了一些新的东西,我想要继续把东西往前推的时候,社区的人更喜欢保持事情还是原来那样。就像btc  分叉了 btc, eth 分叉了 etc,如果你想要做大的改动,或者是一些牵扯到架构的改动,就像steemit 对分发奖励做了一些有风险的改进,或者通胀,我想要给bitshare加上一些有限的通胀,来为之后的开发募集资金。社区的人可能更喜欢原来把他们吸引到现在的一种方式,很难去改变一些什么。我开始新项目的原因是,当你学到了一些足够的东西,但是你又没有能力带着整个社区前进。当你创建了一个新的区块链,组建一个新的社区,那些认同你观念人们可以卖掉他们旧的token买入新的token。这里有个平衡,每个人都得到他们想要的,这就是自由市场在一些很困难的情况下如何达成一致性。在这些情况下,没人知道新的想法是否一定会比老的好。有些情况下你必须要扔掉旧的一些东西,但是不是每个人都想让那些旧的东西走开。


 

Q: 现在怎么看bts,人们还是使用它交易


A:bts现在交易还在大量的增长,在我没有参与的情况下,除了一些紧急的bug处理以为。bts在靠自己的力量成长,当我离开bts之后,bts确实价格涨了不少,对于steem 也是一样的,我离开之后steem 涨了不少。所以这是一个好事情,像中本聪离开比特币,比特币也开始涨了不少。对于去中心化的系统来说,不在依赖创始人,这是一个衡量标准。bts还没有达到空间,技术上我认为,bts是一个比eth更好的分发token的平台,只是人们不太清楚这点,并且交易所没有很好的集成进去这一点。从技术上讲,bitshare可以承载比eth多两到三倍的交易量。


 

Q: bts 现在每天的应对的交易量是eth的三倍?


A:是的,每天


 

Q: 现在每周都会有新的ico,你怎么看,哪些条件可以决定项目有可能成功,有可能有长期价值。


A:他们都在犯同样的错,给那些不需要token的东西添加token,他们给那些不能从去中心化获益的东西,添加去中心化。在这个领域内最大的挑战是,很多理论密码学家而没有软件架构的经验与原则。这个市场里的大部分人,听起来都在做一样的事情, 在好项目和坏项目之间的细节,很难从表面去分辨。


 

Q: 现在你在做eos, 如果你接下来去做其他的事情怎么办


A:我对blockone 做了一个长期承诺,过去的项目迁移,bts实际上是用光了开发资金,这种情况在eos不会发生。我之后的项目也会在eos上构建,eos被设计为一个可扩展的,高性能的编程平台。建立一个社区是很困难的事情,重新建立一条链并不是我特别想做的一件事情。我只会在有不能解决的问题的时候这样做。Eos 包含了我过去的项目的很多经验,我们现在有这么好的团队和我一起工作。我下个项目将会在EOS上开发,而不是取代eos。我想要使用我自己创造的东西,只要eos可以通过内置的宪法进化。 Eos 的目标是成为通用的构建app的平台,而不是像steemit,只是很窄的专注于社交网络。我没有预见任何需求,我需要从eos平台上移开。因为EOS 可以让我做任何我需要做的事。


  

Q: EOS有点像区块链的SDK,如何比较EOS和ETH


A: steemit 不可能建立在eth之上,eth很慢,而且用户必须购买token才能够使用平台。这些事情,让steemit 不能在eth上实现。实现一个bts类似的交易所是可能的,但是相比于中心化的交易所,受限于fee和性能。我们想创建eos的一个原因就是,eth不能够支持我们创建我们想创建的应用。我对eos的测试case就是,我能不能创建bts或者steemit。微处理器没有任何操作系统在其之上,技术上说你可以做任何事情,但是你需要自己去直接操作硬件,你没有数据库,你没有账户系统 ,你没有任何你习以为常的操作系统类的东西。EOS是一个操作系统,是因为它处理了额外的复杂性,他帮你管理磁盘,给了你一个带更高抽象的索引的数据库,帮你管理账户系统,给你了权限管理,帮你计划多线程调度,给了你可扩展性。

 


Q: 怎么防止别人做一个和eos类似的东西出来,有这些所有的功能但是基于eth。


A:因为eth需要他们的收费模型,需要改变他们的一致性模型,需要提高吞吐量,所以,eth如果要完全提供eos的功能,有很多的工作需要做。eth现在只做了提高并发执行速度的计划,并没有做提高线性执行的计划,即使是在最新的plasma中。

 


Q: 是不是也会有一个图灵完备的脚本语言


A: 我们会使用,webAssmbly,这个是浏览器之后的工业标准,被微软,google,apple 支持。webAssmbly 被设计的时候,就是要提供一个可信的高性能的运行环境运行在浏览器上,我们把它应用在了区块链上。这本来就是一个沙箱,我们添加了一些限制,比如最多应用可以在这个上面跑多长时间,来限制人们在上面创建无限的循环,eth不能用无限循环,因为当最终gas被用完后,循环将被停止,同样的逻辑我们也应用在eos上。你可在eos上编程,当与合约交互的时候,你可以选择同步交互或者异步交互。合约本身可以并行执行。你可以只跑那些你需要的合约,你可以只跑那些与你的生意有关的合约,steemit是跑在eos上的,那么你就不需要跑bts的合约,因为这些合约和社交平台的网络无关。这样更加的真实。


 

Q:没有fee的情况下怎么能够处理无限循环


A :区块生产者决定打包你的交易,是因为它运行了你的交易并且交易完成了。如果你扩散交易,所有的完整生产者都会尝试执行它,并打包,如果你太慢了,在打包之前就会被丢弃。如果一个节点,错误的打包了一个需要一秒钟去执行的交易,这个节点就会被投票出去失去生产权。


 

Q:  如果需要检查执行时间,会不会形成性能瓶颈


A:关于性能是两点,第一点是虚拟机的速度,基于 webAssmbly 和 jit,我们可以每秒执行5万笔转账,大概是eth的10倍速度, 第二点是可水平拆分性, 这是eos的闪光点,交易留可以同时被多个电脑,多个cpu所执行。





 

Q: 当部分运行的是一个子集的网络,你怎么去保证这个运行时不会处理错误的信息


A: EOS 的全节点可以运行和确认所有的东西,每个人都可以通过全节点的网络来确保每件事情都是经过验证的。另外每笔交易都会在一个 merkle tree 上,所以你可以证明导入的已完成的交易是在链上的。你从银行拿到的支票,都会有一些特征,你可能不知道支票的金额,但是知道确实有人给你支付了一笔。这里有一个概念上的冲突,即基于状态的区块链vs基于消息的区块链。EOS是基于消息达到一致的区块链,所有的在链上的消息都被视为是有效的,并且是被执行过的。基于状态的方式,只有在交易正在被执行的时候可以被衡量。对于一个eth合约来说, 你很难证明现在的运行状态,除非它正在运行,所以,就像时间一样,你可以证明它过去的状态,但是你不能判定它现在执行的状态。基于状态,让整个区块链更僵硬,也更难去优化。ETH 在做sharding 的过程中,可以需要使用到消息的。EOS客户端可以去验证所有交易,而且并不需要去跑所有的东西,如果你需要去查询状态,你可以查询多个多个节点,把所有的信息组合起来。

EOS还有其它的王牌,在eos的链上,在签名每笔交易的时候,也签名了EOS宪法。EOS宪法是一份所有用户达成的共识,如果你用一个服务去查询状态,eos会返回一个描述当时状态的签名的声明,如果之后可以证明,用户关于这个声明撒谎了,你可以要求用户为他们撒谎的行为负责。这里有一个,关于,性能,安全,可用性的平衡。我们和ETH最大的不同是,我们的目标是商业服务,更大的应用,就像fackbook,交易所,社交媒体,预测市场。所有这些都需要服务于百万用户,所有的这些服务,都不会在你的家用电脑上运行,通过你的家用网络和互联网连接。大部分这些服务都是完全合法的,不会有政府强行关闭的可能性。所以这些部分是可以运行在有着高带宽的机房的。通过这样去获得的,去中心化,可扩展性对于我们把区块链推向主流市场是非常的重要的。


 

Q: EOS 不像eth有花费模型,你能解释一下么


A: 我们最基础的模型是从steemit拷贝过来的,用户手里有很小一笔资产,大概只有几刀,但这不会妨碍用户进行大部分的交互,你甚至不需有资产,只要有代理的资产。比如你可以对一个用户说,我可以把属于我的网络带宽给你如果你使用这些带宽,其他人可以免费使用这些带宽。

Facebook 为自己的服务器支付费用, 而不是你去支付。商业服务者需要从其他地方获取收益,而不是通过每打开一个页面都要求一些收益。ETH的fee模型,是不可控制的,你总是会把你的eth用光。但是,在eos上你可以始终用一个慢速交易。对于开发者来说,租赁和拥有在应用之后的硬件是有区别的。我们也始终在为spam做准备,限流算法意味着,当你进行ico的时候,不会有能阻断普通用户的限流攻击出现。


 

Q:EOS 可以卖出流量使用权么,有些时刻我需要应对大量的流量,有些时候我并不需要


A:这有点像你的网络服务商,他们会给你一个基本带宽,但是你可以升级到更高的容量,如果其他人并没有在使用。如果你有1%的EOS,只有当网络100%使用的时候,你才会被限流到只有1%的带宽,对于大多数人来说,只有当网络被充满的时候,才会限流。


 

Q:如何比较 DPOS 和 Casper


A: 一致性算法有这样几个方面,谁应该打包区块,什么时间应该打包区块,怎么能确定区块本身是不可逆的。pow假设我们有很多忠诚的算力在竞争,第一个发现问题答案的生产者,会拥有打包的时间和决定权,在经过如此多的确认之后,这个变成了不可逆的了。在EOS里,你有股票,也有投票权,去选择哪些人去生产区块, 这些区块生产者,就像eth的矿池一样。我习惯这样去想,比特币和eth实际上是代理模式的pow,那些生产区块的人,和那些指派矿池的人不是同一批人。在EOS里,我们通过投票确认谁去生产,接下来的问题就是什么时间去生产接下来的区块。我们的dpos算法可以让所有的参与的算力者,轮流去生产区块。这样就意味着我们不会有孤儿区块。理论上来说,矿池也可以做到这一样的事情,只是他们的一致性算法不允许他们这样出块。这和casper 比怎么样。Casper 没有真正解决谁应该打包和什么时间出块的问题。Casper 创造每100个区块创造了一个检查点,超过这个检查点,意味着之前的区块都是可信的。Casper在对短期的区块的安全性上做的并不够。每个基于投票的区块链最终归于一个问题,谁在做投票。美联储实际上会为美元升值降值投票,拥有美元的人们在这个问题上没有话语权。就像矿工投票,不要从pow上移开,因为这牵扯到了他们的利益。所有的这些都是错位的激励,dpos工作就像一家公司,选择董事会,让董事会生产区块。这个激励是符合逻辑的。


 

Q:Casper 实际可以认为是所有人来做proof


A:这里有两个角色,区块生产者不意味着区块会被接受,生产区块只是一个提议,这里有一个区块,区块生产者没有权利去生产一个无效的区块,区块生产者没有权利去改变社区的已达成的一致性。你想想一下,现实世界中的一致性,我们只是使用软件,来提高我们达成一致性的速度。dpos 继承了现实世界中的检查者和生产者,他们是两个角色,而不是一个角色。在Casper里用户可能会生产没有交易的空块,这种在steemit和bts上是不会有的,因为,人们不被允许运行非标准的软件。Casper 这种通过奖赏达成一致性,在博弈论上看是非常完美的,但是当真正使用的时候,就需要考虑人性。


 

Q:DPOS 如何做自治的管理,我认为有两层,一层是协议层面的治理,比如进化和改变一致性算法,一层是应用层面的治理,比如应用有bug,我们需要回滚,你可以帮我们探讨下这两层的自治么


A: 第一层实际上是软件层面的宪法,是有所有的节点上跑的软件决定的。持票者选择区块生产者,决定什么时间去硬分叉。EOS是不会有硬分叉的,当整个网络决定是升级的时候,那些节点不知道怎么去做升级的会被自动关闭。而区块的生产者,也会等到升级后再生产区块,所以即使在你升级的时候,你也不会错失任何一个区块。steem 过去每个月都会有一个大的升级,过去大概进行了18次升级,没有一次会有硬分叉。EOS的一条哲学是,事物需要改变,最适者生存,而不是最强者生存。这也是自由市场的原则,长期来看,如果你不改变,那你就会被淘汰。所以eos被设计为一条可以持续不停进化的链。 这就是第一层的治理。

对于第二层治理,比如开发者开发了一个DAO,那里有一个bug,所有的资金都被偷走了,发行者拥有在没有硬分叉的前提下,升级合约的权利。区块生产者,有审查区块的权利。完美的代码是不可能的,Bug始终会发生,这是EOS认识到的,而其他的平台可能没有意识到的一个问题。即使代码被安全运行了多年,里面还是可能有隐藏的bug。之前一段时间,bts就有这样的一个隐藏bug,非常微妙的情况下,会把所有的生产者给冻结。我们都依赖的SSL,所有的电脑都在用,实际上也是有不安全的问题。代码不是完美的,我们需要有恢复的手段,我们围绕这点做设计。这种方式允许开发者,自己去建立自己的治理层,他们可以创建投票为是否可以更新代码。在其他的一些区块链上,身份和财产是分离的,拥有私钥这个身份,即使你通过hack电脑获得了私钥,并不意味着,你就真的是这个财产的所有人。身份和财产权,是系统想要去保护的,期望完整符合法律,而不是9/10的复合法律。





 

Q: 我们想讨论一下,EOS为期一年的token分发是怎么设计的,这样设计为了什么


A: 我想达到这样几件事,社区驱动的大范围的token分发,对于大部分人参与的公平的机会,这是我们的高级目标。我们构建这样一个ico去模拟挖矿,挖矿是你花费一部分电费来换取生产区块的可能性,但是当你开始挖矿的时候,你不知道有多少人同时也在准备开始挖矿,所以你无法预测当时拿到区块的成本,你只能自己给有一个大概的估计,难度是多少,我的成本可能是多少。我们据此构建了一个长达一年窗口的ico,而不是让人们在10分钟的窗口梭哈大量的金钱。这个ICO让人们在一段时间内忙碌,我们希望有一个更长的时间去开发EOS。EOS将会有一个测试网络,并且到今天为止,大部分的功能都完成了。我们意识到开发一个区块链软件,直到真实上线,是一个戏剧性的漫长过程。你需要仔细测试,通知交易所接入,在区块链的开发后期,开发进展速度会大幅度下降。我们希望有额外的六个月时间,在我们开发完一个最小化可运行的区块链之后,在这段时间里,我们可以快速的增强软件,其它开发者也可以在这段时间内开始开发他们的应用,这里遵循了一个哲学,严肃的软件,需要三到六个月去开发(到稳定)。所以当区块链启动的时候,人们也可以有能力去启动他们的应用。这是为什么我们要做一个一年的代币分发。


 

Q:用户还注意到,你们一开始有一个窗口


A:20%token 前7天,之后每天会有两百万的eos等待认购。所以每天的EOS的一级市场的价格,取决于在这个区间内人们认购的ETH的数量。所以没有人知道最终价格会是多少,即使那些在最后去投的人们。

我们大概产生了3亿美元的收入,这个收入并不是投资,我们利用这笔钱来构建产品。分发代币的目的在于,把token分发的越广泛越好,我们把原来100%在我们手里的token给分发给市场,这是我们在做的事情,


 

Q:这里有一个问题,你说这些收入不是投资


A: 我们是在开曼群岛的公司,所有的我们开发软件的资金,都来自于之前的代币分发。我们只会生产软件,我们甚至不会自己启动网络,对于纽约交易说来说,创建纽约交易的软件和真正运营纽约交易所,是有区别的。我们创建软件,并把软件给分发出去,EOS软件可能并没有价值,除非社区的人民决定使用我们的软件去启动一条链,这条链会根据erc20 去分发真正的token。


 

Q: 如何你们打算盈利,打算怎么盈利


A:我们对我们在block.one 所做的事情会有一个更详细的计划。我们会构建软件,和构建基础架构来构建我们的区块链生意。我们会继续构建EOS,但是EOS的回报可能要等到有人真正启动这条链之后。


 

Q: 我们的意思是,你们赚了很多钱


A: 我们的公司是由发现自由市场的解决方案的责任感所驱动。我们想创造改变世界的技术,就像APPLE也获取了他的收益,他们把收益投入到构建下一代伟大的东西中。他们从Mac中获得利润,用这些利润构建了iPod,从iPod获得利润,用这些收益构建了iPhone。我们有很多可以对世界产生积极影响的事情可以做。


 

Q: 其它的领域内会有这种专款专用的基金,从而来限制钱的使用。


A: 我不是律师,但是我们看到了SEC对DAO的态度,我们希望确保EOS的token分发复合所有的法律。所以条款是,这个token分发不代表任何对block.one 的期待,block.one 也不会去做任何的事情。我们唯一会做的事情,就是开发开源软件。


 

Q:为什么你们会发 Erc20 的token


A:没有经过分发的代币会遇到问题,如果你想要一条区块链,那么你就要经过初次代币分发。按我们的计划,代币分发和网络软件准备会同时完成,如果我们先构建软件,那么我们在之前还是要解决代币分发的问题,这个时间是不可省的。


 

Q: 你怎么可以保证,这些钱会被用于你许诺的事情


A: 我不能做任何保证,任何形式的都不能,任何形式的许诺都会被归结到财产类。我们没有许诺这件事实际上是EOS不被归结为财产的决定性因素。


 

Q: Civic 教育是以购买软件的形式,你们不考虑换用捐赠外的其它方式?


A:这个分发相当于分饼,每个拿到饼的人,可以拿到我们免费且开源的软件,来启动链。这个协议实际上是由市场里所有用钱参与了代币分发的人决定的,他们的所做所为和blockone 没有任何关系。但是如果你要问我的人生目标,包括block.one的目标,我们的目标不是钱,我们的目标是改变世界,给我的孩子们创建一个非组织非暴力的自由的世界。steem 给我最大的激励是,有些在非洲的穷人,现在过上了中产的生活,因为我开发的软件。这是让我每天早上起床的动力,当你有了一些钱之后,有更多的钱,不是什么重要的事情。我会继续尽我最大的努力,去找到一个自由市场的解决方案。


 

Q: 讨论一个 roadmap


A: 每个人都可以在github上看到进度,如果你是一个开发人员,你可以很简单的确认进度,我们现在,就是有了一个p2p的网络,有了合约的功能,我们接下来一段会完善开发文档,创建一些其它的工具,在今年年底,我们希望可以有一个其它开发者可以使用的软件。接下来是5个月的测试,压力测试,和一些微调。当eos发布的时候,人们需要去竞赛,如何熟悉软件,如何成为初始的区块生产者,从那点开始,每秒两万五到五万交易会是我们的单线程应用的目标,这个单线程实现,可以升级到多线程实现而不需要违反一致性,现在主要是,安全第一,性能第二。我们设计eos就是为了并行,可水平拓展设计的。现在是为了多线程设计,但是实现用了单线程,仅仅是现在的容量,实际上已经很大了。我们后续会继续升级,这是我们的长期计划。


 

Q:你们希望如何联系你们


A:在steem上follow我和block.one,订阅我们的邮件组。 查看全部
视频来源:https://www.youtube.com/watch?v=eftctVXiFJQ

译者:汪涛,原载于其公众号 反求诸己  ,这篇是2017年8月23号,Dan 接受采访的翻译。

59e4603824187_200_146.jpg

 


Q: 我们对你如何进入这个区块链世界非常感兴趣,你怎么接触到区块链和比特币的



A: 很久之前,我开始在对我自己的生活每方面都提问,希望得到生活的真相。我掉进了自由市场(free markets)和奥地利经济学(Austrian economics)的兔子洞。我意识到,我想创建这样的一个系统,通过非暴力的方式给予我们自由。然后我就给我的人生设置了一个目标,为自由市场提供解决方案,从而保证生命和财产的自由。

为了保证生命和财产的自由,我们需要一些不能被打印被控制的钱。所以我想找到一些金和银的替代品,因为,他们不是很容易的运输与携带。大概是2009年,我正好发现了bitcoin,那时的btc,还可以在普通的电脑上挖出一个完整的区块。所以我在这个行业里非常的久了。

在2013年,在门头沟的美国账户,被美国政府给控制了的时候。我意识到所有的这些交易所,都是很容易受到攻击的。很有可能政府会关闭交易所,可能会切断交易所的现金流,这是为什么我站出来要创建 bts,一个去中心化的交易所,主要功能是锚定资产可以跟随,金,银,美元,人民币。然后可以用这些锚定资产再去交易数字资产。

当我在建设这样的一个去中心化的交易所的时候,我意识到区块链科技不能满足需求,比特币10分钟出一个块对于交易来说是不能接受的。2013-2015,我创建了bts1和bts2.0,bts 是第一个区块链可以做到每秒万次交易的区块链,我在过去的几年,都是在把区块链的性能推向现实世界实际的性能要求。bts也是第一个拥有账户系统,和内在治理系统的区块链。人们实际上被区块链所雇佣。实际上是把浪费在挖矿上的价值用于价值再生产,然后把产生的价值在返还给token。

这是我对bts所做的事情,bts到现在还是有没有大规模使用的问题,还是很难说服很多人在一条区块链上去完成交易。还有交易手续费,你有一个去中心化的交易所,当你创建买单或者取消买单的时候都会向你收费,这些都是bts普及的障碍。

当我们在区块链萧条的时候,我们也用光了bts筹集来的开发资金。之后我想出了一个主意,做一个区块链上的社交网络,我们会奖赏那些生产内容的用户,然后这些内容会自然的吸引流量,比如从google。这样吸引新的用户不会有任何的花费。这可能是第一条区块链,让你可以通过贡献你的工作,你的内容来让token增值,而不需要贡献任何的金钱。

steemit 是一个区块奖励系统的试验。比特币只有少数矿工才能够拿到奖励,十万人可以每天得到区块链的奖励,这意味着,分配奖励的工作需要去中心化。在bts中,必须所有的投票者都同意,用户才能得到奖励,这个过程是非常困难的,非常政治的。我们把分配奖励的决定权,降权到一个非常低的级别。让每个人都可以通过点赞这个操作,来让区块链释放一部分的奖赏。到目前为止 ,steemit非常成功,在一年之内 已经是全球的前2000家的网站。这个帮助许多人接触到了区块链科技,也在区块链的架构方面帮助了我很多。

在完成了bts,和steemit 之后,我意识到,这两个应用有许多东西是一致的,其他大量的应用,可以通过继承相同的账户系统,账户恢复,高性能,steem 和 bts 都是业界的顶尖性能。这两个区块链加起来的区块量,超过整个市场半数以上。在 steem 我们让大部分的操作免费起来,因为用户不会想因为点赞付费,他们只会为发表或评论这样的动作付费。现在我的工作转移到了eos,eos是相当于把所有的事情放到了一起。提供每个人都可以使用的一个编程环境。


 


Q:这是非常影响深刻的一个简介 ,每个人都会被你过去做的大量工作所震惊,但是我们好奇的是是什么你从bitshare,迁移到 steemit,再迁移到eos。



A:我学到的最大教训是,当我学习到了一些新的东西,我想要继续把东西往前推的时候,社区的人更喜欢保持事情还是原来那样。就像btc  分叉了 btc, eth 分叉了 etc,如果你想要做大的改动,或者是一些牵扯到架构的改动,就像steemit 对分发奖励做了一些有风险的改进,或者通胀,我想要给bitshare加上一些有限的通胀,来为之后的开发募集资金。社区的人可能更喜欢原来把他们吸引到现在的一种方式,很难去改变一些什么。我开始新项目的原因是,当你学到了一些足够的东西,但是你又没有能力带着整个社区前进。当你创建了一个新的区块链,组建一个新的社区,那些认同你观念人们可以卖掉他们旧的token买入新的token。这里有个平衡,每个人都得到他们想要的,这就是自由市场在一些很困难的情况下如何达成一致性。在这些情况下,没人知道新的想法是否一定会比老的好。有些情况下你必须要扔掉旧的一些东西,但是不是每个人都想让那些旧的东西走开。


 


Q: 现在怎么看bts,人们还是使用它交易



A:bts现在交易还在大量的增长,在我没有参与的情况下,除了一些紧急的bug处理以为。bts在靠自己的力量成长,当我离开bts之后,bts确实价格涨了不少,对于steem 也是一样的,我离开之后steem 涨了不少。所以这是一个好事情,像中本聪离开比特币,比特币也开始涨了不少。对于去中心化的系统来说,不在依赖创始人,这是一个衡量标准。bts还没有达到空间,技术上我认为,bts是一个比eth更好的分发token的平台,只是人们不太清楚这点,并且交易所没有很好的集成进去这一点。从技术上讲,bitshare可以承载比eth多两到三倍的交易量。


 


Q: bts 现在每天的应对的交易量是eth的三倍?



A:是的,每天


 


Q: 现在每周都会有新的ico,你怎么看,哪些条件可以决定项目有可能成功,有可能有长期价值。



A:他们都在犯同样的错,给那些不需要token的东西添加token,他们给那些不能从去中心化获益的东西,添加去中心化。在这个领域内最大的挑战是,很多理论密码学家而没有软件架构的经验与原则。这个市场里的大部分人,听起来都在做一样的事情, 在好项目和坏项目之间的细节,很难从表面去分辨。


 


Q: 现在你在做eos, 如果你接下来去做其他的事情怎么办



A:我对blockone 做了一个长期承诺,过去的项目迁移,bts实际上是用光了开发资金,这种情况在eos不会发生。我之后的项目也会在eos上构建,eos被设计为一个可扩展的,高性能的编程平台。建立一个社区是很困难的事情,重新建立一条链并不是我特别想做的一件事情。我只会在有不能解决的问题的时候这样做。Eos 包含了我过去的项目的很多经验,我们现在有这么好的团队和我一起工作。我下个项目将会在EOS上开发,而不是取代eos。我想要使用我自己创造的东西,只要eos可以通过内置的宪法进化。 Eos 的目标是成为通用的构建app的平台,而不是像steemit,只是很窄的专注于社交网络。我没有预见任何需求,我需要从eos平台上移开。因为EOS 可以让我做任何我需要做的事。


  


Q: EOS有点像区块链的SDK,如何比较EOS和ETH



A: steemit 不可能建立在eth之上,eth很慢,而且用户必须购买token才能够使用平台。这些事情,让steemit 不能在eth上实现。实现一个bts类似的交易所是可能的,但是相比于中心化的交易所,受限于fee和性能。我们想创建eos的一个原因就是,eth不能够支持我们创建我们想创建的应用。我对eos的测试case就是,我能不能创建bts或者steemit。微处理器没有任何操作系统在其之上,技术上说你可以做任何事情,但是你需要自己去直接操作硬件,你没有数据库,你没有账户系统 ,你没有任何你习以为常的操作系统类的东西。EOS是一个操作系统,是因为它处理了额外的复杂性,他帮你管理磁盘,给了你一个带更高抽象的索引的数据库,帮你管理账户系统,给你了权限管理,帮你计划多线程调度,给了你可扩展性。

 



Q: 怎么防止别人做一个和eos类似的东西出来,有这些所有的功能但是基于eth。



A:因为eth需要他们的收费模型,需要改变他们的一致性模型,需要提高吞吐量,所以,eth如果要完全提供eos的功能,有很多的工作需要做。eth现在只做了提高并发执行速度的计划,并没有做提高线性执行的计划,即使是在最新的plasma中。

 



Q: 是不是也会有一个图灵完备的脚本语言



A: 我们会使用,webAssmbly,这个是浏览器之后的工业标准,被微软,google,apple 支持。webAssmbly 被设计的时候,就是要提供一个可信的高性能的运行环境运行在浏览器上,我们把它应用在了区块链上。这本来就是一个沙箱,我们添加了一些限制,比如最多应用可以在这个上面跑多长时间,来限制人们在上面创建无限的循环,eth不能用无限循环,因为当最终gas被用完后,循环将被停止,同样的逻辑我们也应用在eos上。你可在eos上编程,当与合约交互的时候,你可以选择同步交互或者异步交互。合约本身可以并行执行。你可以只跑那些你需要的合约,你可以只跑那些与你的生意有关的合约,steemit是跑在eos上的,那么你就不需要跑bts的合约,因为这些合约和社交平台的网络无关。这样更加的真实。


 


Q:没有fee的情况下怎么能够处理无限循环



A :区块生产者决定打包你的交易,是因为它运行了你的交易并且交易完成了。如果你扩散交易,所有的完整生产者都会尝试执行它,并打包,如果你太慢了,在打包之前就会被丢弃。如果一个节点,错误的打包了一个需要一秒钟去执行的交易,这个节点就会被投票出去失去生产权。


 


Q:  如果需要检查执行时间,会不会形成性能瓶颈



A:关于性能是两点,第一点是虚拟机的速度,基于 webAssmbly 和 jit,我们可以每秒执行5万笔转账,大概是eth的10倍速度, 第二点是可水平拆分性, 这是eos的闪光点,交易留可以同时被多个电脑,多个cpu所执行。





 


Q: 当部分运行的是一个子集的网络,你怎么去保证这个运行时不会处理错误的信息



A: EOS 的全节点可以运行和确认所有的东西,每个人都可以通过全节点的网络来确保每件事情都是经过验证的。另外每笔交易都会在一个 merkle tree 上,所以你可以证明导入的已完成的交易是在链上的。你从银行拿到的支票,都会有一些特征,你可能不知道支票的金额,但是知道确实有人给你支付了一笔。这里有一个概念上的冲突,即基于状态的区块链vs基于消息的区块链。EOS是基于消息达到一致的区块链,所有的在链上的消息都被视为是有效的,并且是被执行过的。基于状态的方式,只有在交易正在被执行的时候可以被衡量。对于一个eth合约来说, 你很难证明现在的运行状态,除非它正在运行,所以,就像时间一样,你可以证明它过去的状态,但是你不能判定它现在执行的状态。基于状态,让整个区块链更僵硬,也更难去优化。ETH 在做sharding 的过程中,可以需要使用到消息的。EOS客户端可以去验证所有交易,而且并不需要去跑所有的东西,如果你需要去查询状态,你可以查询多个多个节点,把所有的信息组合起来。

EOS还有其它的王牌,在eos的链上,在签名每笔交易的时候,也签名了EOS宪法。EOS宪法是一份所有用户达成的共识,如果你用一个服务去查询状态,eos会返回一个描述当时状态的签名的声明,如果之后可以证明,用户关于这个声明撒谎了,你可以要求用户为他们撒谎的行为负责。这里有一个,关于,性能,安全,可用性的平衡。我们和ETH最大的不同是,我们的目标是商业服务,更大的应用,就像fackbook,交易所,社交媒体,预测市场。所有这些都需要服务于百万用户,所有的这些服务,都不会在你的家用电脑上运行,通过你的家用网络和互联网连接。大部分这些服务都是完全合法的,不会有政府强行关闭的可能性。所以这些部分是可以运行在有着高带宽的机房的。通过这样去获得的,去中心化,可扩展性对于我们把区块链推向主流市场是非常的重要的。


 


Q: EOS 不像eth有花费模型,你能解释一下么



A: 我们最基础的模型是从steemit拷贝过来的,用户手里有很小一笔资产,大概只有几刀,但这不会妨碍用户进行大部分的交互,你甚至不需有资产,只要有代理的资产。比如你可以对一个用户说,我可以把属于我的网络带宽给你如果你使用这些带宽,其他人可以免费使用这些带宽。

Facebook 为自己的服务器支付费用, 而不是你去支付。商业服务者需要从其他地方获取收益,而不是通过每打开一个页面都要求一些收益。ETH的fee模型,是不可控制的,你总是会把你的eth用光。但是,在eos上你可以始终用一个慢速交易。对于开发者来说,租赁和拥有在应用之后的硬件是有区别的。我们也始终在为spam做准备,限流算法意味着,当你进行ico的时候,不会有能阻断普通用户的限流攻击出现。


 


Q:EOS 可以卖出流量使用权么,有些时刻我需要应对大量的流量,有些时候我并不需要



A:这有点像你的网络服务商,他们会给你一个基本带宽,但是你可以升级到更高的容量,如果其他人并没有在使用。如果你有1%的EOS,只有当网络100%使用的时候,你才会被限流到只有1%的带宽,对于大多数人来说,只有当网络被充满的时候,才会限流。


 


Q:如何比较 DPOS 和 Casper



A: 一致性算法有这样几个方面,谁应该打包区块,什么时间应该打包区块,怎么能确定区块本身是不可逆的。pow假设我们有很多忠诚的算力在竞争,第一个发现问题答案的生产者,会拥有打包的时间和决定权,在经过如此多的确认之后,这个变成了不可逆的了。在EOS里,你有股票,也有投票权,去选择哪些人去生产区块, 这些区块生产者,就像eth的矿池一样。我习惯这样去想,比特币和eth实际上是代理模式的pow,那些生产区块的人,和那些指派矿池的人不是同一批人。在EOS里,我们通过投票确认谁去生产,接下来的问题就是什么时间去生产接下来的区块。我们的dpos算法可以让所有的参与的算力者,轮流去生产区块。这样就意味着我们不会有孤儿区块。理论上来说,矿池也可以做到这一样的事情,只是他们的一致性算法不允许他们这样出块。这和casper 比怎么样。Casper 没有真正解决谁应该打包和什么时间出块的问题。Casper 创造每100个区块创造了一个检查点,超过这个检查点,意味着之前的区块都是可信的。Casper在对短期的区块的安全性上做的并不够。每个基于投票的区块链最终归于一个问题,谁在做投票。美联储实际上会为美元升值降值投票,拥有美元的人们在这个问题上没有话语权。就像矿工投票,不要从pow上移开,因为这牵扯到了他们的利益。所有的这些都是错位的激励,dpos工作就像一家公司,选择董事会,让董事会生产区块。这个激励是符合逻辑的。


 


Q:Casper 实际可以认为是所有人来做proof



A:这里有两个角色,区块生产者不意味着区块会被接受,生产区块只是一个提议,这里有一个区块,区块生产者没有权利去生产一个无效的区块,区块生产者没有权利去改变社区的已达成的一致性。你想想一下,现实世界中的一致性,我们只是使用软件,来提高我们达成一致性的速度。dpos 继承了现实世界中的检查者和生产者,他们是两个角色,而不是一个角色。在Casper里用户可能会生产没有交易的空块,这种在steemit和bts上是不会有的,因为,人们不被允许运行非标准的软件。Casper 这种通过奖赏达成一致性,在博弈论上看是非常完美的,但是当真正使用的时候,就需要考虑人性。


 


Q:DPOS 如何做自治的管理,我认为有两层,一层是协议层面的治理,比如进化和改变一致性算法,一层是应用层面的治理,比如应用有bug,我们需要回滚,你可以帮我们探讨下这两层的自治么



A: 第一层实际上是软件层面的宪法,是有所有的节点上跑的软件决定的。持票者选择区块生产者,决定什么时间去硬分叉。EOS是不会有硬分叉的,当整个网络决定是升级的时候,那些节点不知道怎么去做升级的会被自动关闭。而区块的生产者,也会等到升级后再生产区块,所以即使在你升级的时候,你也不会错失任何一个区块。steem 过去每个月都会有一个大的升级,过去大概进行了18次升级,没有一次会有硬分叉。EOS的一条哲学是,事物需要改变,最适者生存,而不是最强者生存。这也是自由市场的原则,长期来看,如果你不改变,那你就会被淘汰。所以eos被设计为一条可以持续不停进化的链。 这就是第一层的治理。

对于第二层治理,比如开发者开发了一个DAO,那里有一个bug,所有的资金都被偷走了,发行者拥有在没有硬分叉的前提下,升级合约的权利。区块生产者,有审查区块的权利。完美的代码是不可能的,Bug始终会发生,这是EOS认识到的,而其他的平台可能没有意识到的一个问题。即使代码被安全运行了多年,里面还是可能有隐藏的bug。之前一段时间,bts就有这样的一个隐藏bug,非常微妙的情况下,会把所有的生产者给冻结。我们都依赖的SSL,所有的电脑都在用,实际上也是有不安全的问题。代码不是完美的,我们需要有恢复的手段,我们围绕这点做设计。这种方式允许开发者,自己去建立自己的治理层,他们可以创建投票为是否可以更新代码。在其他的一些区块链上,身份和财产是分离的,拥有私钥这个身份,即使你通过hack电脑获得了私钥,并不意味着,你就真的是这个财产的所有人。身份和财产权,是系统想要去保护的,期望完整符合法律,而不是9/10的复合法律。





 


Q: 我们想讨论一下,EOS为期一年的token分发是怎么设计的,这样设计为了什么



A: 我想达到这样几件事,社区驱动的大范围的token分发,对于大部分人参与的公平的机会,这是我们的高级目标。我们构建这样一个ico去模拟挖矿,挖矿是你花费一部分电费来换取生产区块的可能性,但是当你开始挖矿的时候,你不知道有多少人同时也在准备开始挖矿,所以你无法预测当时拿到区块的成本,你只能自己给有一个大概的估计,难度是多少,我的成本可能是多少。我们据此构建了一个长达一年窗口的ico,而不是让人们在10分钟的窗口梭哈大量的金钱。这个ICO让人们在一段时间内忙碌,我们希望有一个更长的时间去开发EOS。EOS将会有一个测试网络,并且到今天为止,大部分的功能都完成了。我们意识到开发一个区块链软件,直到真实上线,是一个戏剧性的漫长过程。你需要仔细测试,通知交易所接入,在区块链的开发后期,开发进展速度会大幅度下降。我们希望有额外的六个月时间,在我们开发完一个最小化可运行的区块链之后,在这段时间里,我们可以快速的增强软件,其它开发者也可以在这段时间内开始开发他们的应用,这里遵循了一个哲学,严肃的软件,需要三到六个月去开发(到稳定)。所以当区块链启动的时候,人们也可以有能力去启动他们的应用。这是为什么我们要做一个一年的代币分发。


 


Q:用户还注意到,你们一开始有一个窗口



A:20%token 前7天,之后每天会有两百万的eos等待认购。所以每天的EOS的一级市场的价格,取决于在这个区间内人们认购的ETH的数量。所以没有人知道最终价格会是多少,即使那些在最后去投的人们。

我们大概产生了3亿美元的收入,这个收入并不是投资,我们利用这笔钱来构建产品。分发代币的目的在于,把token分发的越广泛越好,我们把原来100%在我们手里的token给分发给市场,这是我们在做的事情,


 


Q:这里有一个问题,你说这些收入不是投资



A: 我们是在开曼群岛的公司,所有的我们开发软件的资金,都来自于之前的代币分发。我们只会生产软件,我们甚至不会自己启动网络,对于纽约交易说来说,创建纽约交易的软件和真正运营纽约交易所,是有区别的。我们创建软件,并把软件给分发出去,EOS软件可能并没有价值,除非社区的人民决定使用我们的软件去启动一条链,这条链会根据erc20 去分发真正的token。


 


Q: 如何你们打算盈利,打算怎么盈利



A:我们对我们在block.one 所做的事情会有一个更详细的计划。我们会构建软件,和构建基础架构来构建我们的区块链生意。我们会继续构建EOS,但是EOS的回报可能要等到有人真正启动这条链之后。


 


Q: 我们的意思是,你们赚了很多钱



A: 我们的公司是由发现自由市场的解决方案的责任感所驱动。我们想创造改变世界的技术,就像APPLE也获取了他的收益,他们把收益投入到构建下一代伟大的东西中。他们从Mac中获得利润,用这些利润构建了iPod,从iPod获得利润,用这些收益构建了iPhone。我们有很多可以对世界产生积极影响的事情可以做。


 


Q: 其它的领域内会有这种专款专用的基金,从而来限制钱的使用。



A: 我不是律师,但是我们看到了SEC对DAO的态度,我们希望确保EOS的token分发复合所有的法律。所以条款是,这个token分发不代表任何对block.one 的期待,block.one 也不会去做任何的事情。我们唯一会做的事情,就是开发开源软件。


 


Q:为什么你们会发 Erc20 的token



A:没有经过分发的代币会遇到问题,如果你想要一条区块链,那么你就要经过初次代币分发。按我们的计划,代币分发和网络软件准备会同时完成,如果我们先构建软件,那么我们在之前还是要解决代币分发的问题,这个时间是不可省的。


 


Q: 你怎么可以保证,这些钱会被用于你许诺的事情



A: 我不能做任何保证,任何形式的都不能,任何形式的许诺都会被归结到财产类。我们没有许诺这件事实际上是EOS不被归结为财产的决定性因素。


 


Q: Civic 教育是以购买软件的形式,你们不考虑换用捐赠外的其它方式?



A:这个分发相当于分饼,每个拿到饼的人,可以拿到我们免费且开源的软件,来启动链。这个协议实际上是由市场里所有用钱参与了代币分发的人决定的,他们的所做所为和blockone 没有任何关系。但是如果你要问我的人生目标,包括block.one的目标,我们的目标不是钱,我们的目标是改变世界,给我的孩子们创建一个非组织非暴力的自由的世界。steem 给我最大的激励是,有些在非洲的穷人,现在过上了中产的生活,因为我开发的软件。这是让我每天早上起床的动力,当你有了一些钱之后,有更多的钱,不是什么重要的事情。我会继续尽我最大的努力,去找到一个自由市场的解决方案。


 


Q: 讨论一个 roadmap



A: 每个人都可以在github上看到进度,如果你是一个开发人员,你可以很简单的确认进度,我们现在,就是有了一个p2p的网络,有了合约的功能,我们接下来一段会完善开发文档,创建一些其它的工具,在今年年底,我们希望可以有一个其它开发者可以使用的软件。接下来是5个月的测试,压力测试,和一些微调。当eos发布的时候,人们需要去竞赛,如何熟悉软件,如何成为初始的区块生产者,从那点开始,每秒两万五到五万交易会是我们的单线程应用的目标,这个单线程实现,可以升级到多线程实现而不需要违反一致性,现在主要是,安全第一,性能第二。我们设计eos就是为了并行,可水平拓展设计的。现在是为了多线程设计,但是实现用了单线程,仅仅是现在的容量,实际上已经很大了。我们后续会继续升级,这是我们的长期计划。


 


Q:你们希望如何联系你们



A:在steem上follow我和block.one,订阅我们的邮件组。

Bitshares 2.0 中 object 的 ID

EOS代码分析北溟客 发表了文章 • 0 个评论 • 51 次浏览 • 2017-10-11 21:52 • 来自相关话题

相比较大多数加密货比钱包,BitShares 2.0有一个描述区块链、交易和账户的独特模型。BitShares 区块链中通过object存储各种信息,构成一个庞大的数据库,但是在BitShares 区块链上没有地址,object通过将唯一的id、type和space通过以下形式进行组合完成唯一标识:space.type.id下面是通常使用的对象的列表:[b]ID Object Type
[/b]
1.1.x base object
1.2.x account object
1.3.x asset object
1.4.x force settlement object
1.5.x committee member object
1.6.x witness object
1.7.x limit order object
1.8.x call order object
1.9.x custom object
1.10.x proposal object
1.11.x operation history object
1.12.x withdraw permission object
1.13.x vesting balance object
1.14.x worker object
1.15.x balance object
2.0.x global_property_object
2.1.x dynamic_global_property_object
2.3.x asset_dynamic_data
2.4.x asset_bitasset_data
2.5.x account_balance_object
2.6.x account_statistics_object
2.7.x transaction_object
2.8.x block_summary_object
2.9.x account_transaction_history_object
2.10.x blinded_balance_object
2.11.x chain_property_object
2.12.x witness_schedule_object
2.13.x budget_record_object
2.14.x special_authority_object第一位数字“1”或者“2”代表不同的空间,“1”表示协议空间(Protocol Space),“2”表示实现空间(Implementattion Space)。
对于那些想处理graphene的C++代码的高级用户,我们在这里列出object_type和impl_object_type定义
协议空间(1.x.x)enum graphene::chain::object_type这个枚举列出各个命名空间所有的object类型,这样这些object可以很容易地在调试输出显示出来。如果一个第三方希望能够拓展核心代码,他将必须将packed_object::type域的类型从enum_type改为uint16,从而避免在进行packed_objects和json相互转换的过程中出现警告。Values:
null_object_type
base_object_type
account_object_type
asset_object_type
force_settlement_object_type
committee_member_object_type
witness_object_type
limit_order_object_type
call_order_object_type
custom_object_type
proposal_object_type
operation_history_object_type
withdraw_permission_object_type
vesting_balance_object_type
worker_object_type
balance_object_type

OBJECT_TYPE_COUNT //哨兵值(Sentry value)包含不同类型的对象的数量。实现空间(2.x.x)enum graphene::chain::impl_object_type下面是实现空间中的类型的值Values:
impl_global_property_object_type
impl_dynamic_global_property_object_type
impl_reserved0_object_type
impl_asset_dynamic_data_type
impl_asset_bitasset_data_type
impl_account_balance_object_type
impl_account_statistics_object_type
impl_transaction_object_type
impl_block_summary_object_type
impl_account_transaction_history_object_type
impl_blinded_balance_object_type
impl_chain_property_object_type
impl_witness_schedule_object_type
impl_budget_record_object_type
impl_special_authority_object_type
impl_buyback_object_type
impl_fba_accumulator_object_type在具体的实现中,使用最后一个ID值表示存储的信息的索引。使用如下代码可以显示一个存储对象的具体的ID的值:string witness_id_example = fc::json::to_string(chain::witness_id_type(5));
std::cout << witness_id_example << std::endl;其输出为:$ 1.6.5这里假设一个witness对象的具体的ID为5, 则这个对象在数据库中完整的索引值就是“1.6.5”。 查看全部
相比较大多数加密货比钱包,BitShares 2.0有一个描述区块链、交易和账户的独特模型。BitShares 区块链中通过object存储各种信息,构成一个庞大的数据库,但是在BitShares 区块链上没有地址,object通过将唯一的id、type和space通过以下形式进行组合完成唯一标识:
space.type.id
下面是通常使用的对象的列表:
[b]ID	    Object Type
[/b]
1.1.x base object
1.2.x account object
1.3.x asset object
1.4.x force settlement object
1.5.x committee member object
1.6.x witness object
1.7.x limit order object
1.8.x call order object
1.9.x custom object
1.10.x proposal object
1.11.x operation history object
1.12.x withdraw permission object
1.13.x vesting balance object
1.14.x worker object
1.15.x balance object
2.0.x global_property_object
2.1.x dynamic_global_property_object
2.3.x asset_dynamic_data
2.4.x asset_bitasset_data
2.5.x account_balance_object
2.6.x account_statistics_object
2.7.x transaction_object
2.8.x block_summary_object
2.9.x account_transaction_history_object
2.10.x blinded_balance_object
2.11.x chain_property_object
2.12.x witness_schedule_object
2.13.x budget_record_object
2.14.x special_authority_object
第一位数字“1”或者“2”代表不同的空间,“1”表示协议空间(Protocol Space),“2”表示实现空间(Implementattion Space)。
对于那些想处理graphene的C++代码的高级用户,我们在这里列出object_type和impl_object_type定义
协议空间(1.x.x)
enum graphene::chain::object_type
这个枚举列出各个命名空间所有的object类型,这样这些object可以很容易地在调试输出显示出来。如果一个第三方希望能够拓展核心代码,他将必须将packed_object::type域的类型从enum_type改为uint16,从而避免在进行packed_objects和json相互转换的过程中出现警告。
Values:
null_object_type
base_object_type
account_object_type
asset_object_type
force_settlement_object_type
committee_member_object_type
witness_object_type
limit_order_object_type
call_order_object_type
custom_object_type
proposal_object_type
operation_history_object_type
withdraw_permission_object_type
vesting_balance_object_type
worker_object_type
balance_object_type

OBJECT_TYPE_COUNT //哨兵值(Sentry value)包含不同类型的对象的数量。
实现空间(2.x.x)
enum graphene::chain::impl_object_type
下面是实现空间中的类型的值
Values:
impl_global_property_object_type
impl_dynamic_global_property_object_type
impl_reserved0_object_type
impl_asset_dynamic_data_type
impl_asset_bitasset_data_type
impl_account_balance_object_type
impl_account_statistics_object_type
impl_transaction_object_type
impl_block_summary_object_type
impl_account_transaction_history_object_type
impl_blinded_balance_object_type
impl_chain_property_object_type
impl_witness_schedule_object_type
impl_budget_record_object_type
impl_special_authority_object_type
impl_buyback_object_type
impl_fba_accumulator_object_type
在具体的实现中,使用最后一个ID值表示存储的信息的索引。使用如下代码可以显示一个存储对象的具体的ID的值:
string witness_id_example = fc::json::to_string(chain::witness_id_type(5));
std::cout << witness_id_example << std::endl;
其输出为:
$ 1.6.5
这里假设一个witness对象的具体的ID为5, 则这个对象在数据库中完整的索引值就是“1.6.5”。

寻找下一个以太坊系列(2):EOS

EOS其他相关郑浩 发表了文章 • 0 个评论 • 117 次浏览 • 2017-09-30 15:49 • 来自相关话题

今天我们来看下EOS(纯技术角度)

EOS定位下一代区块链智能合约平台,致力于解决当前区块链技术中的一些关键挑战:性能、用户体验和治理。目前,EOS处于待发布测试网络的阶段; 没有生产运行的区块链、虚拟机、智能合约开发环境。EOS基于开发Bitshares和Steem平台的多年实践经验,最关键的是该项目“不差钱”。

EOS宣称颠覆以太坊的几大方面:更高的交易吞吐量、0成本交易和结构化治理。下面我们进一步了解一下。

交易吞吐量

EOS通过引入(如代理权益证明(DPoS))、并行处理、加快验证和其他优化技术来实现超越以太坊的性能水平。当然,Ethereum生态系统也正在研究和开发类似的改进。

尽管听着相似,但是EOS的代理权益证明共识机制与Ethereum提出的Casper协议几乎没有共同之处。在EOS中,由一组21名当选者负责轮流出块。这种模式必须高度信任这些当选者,EOS假设去中心化投票过程可以消除恶意/错误的当选者。而在Casper中,任何愿意存入ETH的人都可以参与共识,恶意/错误的行为将因保证金损失而受到惩罚。目前,以太坊正在严格地实施理论验证,并谨慎地分阶段实施PoS切换,而EOS先期会对Bitshares的DPoS进行重新包装上线,主网可能要等到Ethereum完全转变为纯PoS实施很久后才开始运行。所以EOS所使用的DPoS算法能否在全网有巨大经济价值时可以抵御串通/抵制审查/拒绝服务(DoS)攻击等风险还有待观察。

EOS通过对操作不同账户的交易采取并行执行的方式来提高吞吐率。EOS白皮书描述了一种将区块分解为并行线程的方法,但缺少如何完成独立事务确定性的细节。Ethereum的EIP 648描述了一种在现有区块结构中进行并行事务处理的机制。目前不清楚是EOS还是以太坊谁会先支持并行处理,是否能带来显著的性能优势同样有待验证。

理论上,可以通过仅验证事务的子集来实现性能提升。EOS白皮书描述了部分验证的好处和挑战,但没有提供实施细节。在以太坊中,对加速验证做了大量研究分析(总结在这里),不过社区还没形成一个工程解决方案。两者都处于理论验证期,需要大量时间积累经验并投入生产。

EOS虚拟机支持Web Assembly指令集,它允许预编译的合约接近原始程序的执行效率。而Ethereum Flavored Web Assembly(eWASM)项目正在寻找兼容现有智能合约的方式替换EVM。

在提升交易TPS的问题上,EOS可能具备先发优势,因为它无需承担网络巨大经济体量的风险。如果以太坊不能快速跟进,可能会失去市场份额。不过,随着EOS网络的价值(代币价值)增加,它可能会吸引不可预知的新型攻击,黑客们会利用EOS高性能设计挖掘漏洞,所以,这非常考验EOS的投票机制来预防这种攻击。

无需"燃料"的交易

EOS和Ethereum交易均依赖代币。不同的是,在EOS中,通过向矿工证明存款额获取交易资格,而Ethereum用户直接向矿工支付“燃料”手续费。

EOS凭借免费交易模式来推广应用服务(即智能合约),这种变相补贴模式是一种常见的互联网玩法,用户可以“免费”使用服务,通过其他方式获取利润。但是,公有链设置交易费用的目的主要是提高垃圾交易和DoS攻击的成本,保护智能合约和区块链免受攻击。任何公有链如果发生类似的攻击事件,可能需要付出昂贵代价的硬分叉来解决。

EOS通过使用动态部分预留系统来为用户分配交易所需的带宽,网络根据持有代币占比为用户分配交易所需带宽,并且会参考当时网络的拥塞程度动态调整。通过动态收紧预留,增加攻击的总体成本来抵御攻击。在现有环境下,这种自适应的防御方式可以为EOS带来一定优势,因为以太坊的交易价格是预先设定的。如果这种模式有效,以太坊可以通过两种方式来弥补劣势:1)DApps可以对用户实施交易费返还;2)大都会版本允许由合约支付燃料费用。这些措施的好处是,如果事实证明交易费用对某些场景是必要的,那么可以在每个应用程序上自主设置交易双方谁支付交易费的机制提供了较好的灵活性。

结构化治理

以太坊的治理结构由开发者、矿工和用户组成。协议的升级更新是借由EIP以太坊改进建议的社区驱动模式来管理的,但是一些容量参数(例如区块燃料限制)可以由矿工动态调整。

以太坊的治理遭受了DAO事件的考验,其中近15%的ETH被盗。找回资金的硬分叉由一群意见领袖提出并获得社区大多数人的支持,最终这导致了一次网络分叉,反对的人选择支持原链(即以太经典)。这次事件被认为降低了网络的安全性和整体价值,因此越来越多人开始讨论结构化治理结构,可以在不产生社区分裂的情况下解决问题。在社区中提出了许多链上治理机制的提案(EIP182),但还没有正式的结构披露出来。

相较而言,EOS白皮书描述了协议内置的一些机制。在EOS中由用户选出的记账者负责执行某些治理职能,占多数的(17/21或大约80%)当选者可以有权冻结账户、更新有缺陷的智能合约代码、决策是否分叉。如果当选者的权力不被滥用,就可以有效防范盗窃或故障事件。EOS希望通过系统规则保障大多数人的利益,然而,但通过采用投票和少数服从多数的规则,EOS希望有系统地为大多数人谋利益。唯一不确定的是,用户会愿意将自己的权力交给少数代表,或者这种结构可以阻止少数人的分裂。

结论

EOS提出了一系列性能优化、降低交易手续费、改善治理的解决方案。这些机制的实现高度依赖全体用户对21位当选代表的信任,用户需要利用投票权来防止当选者的作恶行为。

如果这些机制在达到一定网络规模后被验证有效,EOS将在分布式账本领域取得重大进展。在以太坊上发生的智能合约安全事件提醒我们,导致黑客能够从用户账号盗取数百万的漏洞永远是最紧急和最重要的问题,而交易TPS和交易成本永远是次要的。

目前,最有可能超越以太坊的平台应当是提供了更好的智能合约安全性,同时兼具一定的可扩展性。很可惜,EOS的总体设计并不是这个方向,其设计的重心在于功能性上强于以太坊,安全性并未经过严格的工程证明。而以太坊的有关白皮书包括安全性证明、攻击预估成本、故障阈值和其他安全性设计的参数,而EOS有关白皮书则主要介绍基础工作机制,显然欠缺对安全性的描述。不过我们相信,未来EOS一定会发布更加详细的攻击成本分析、安全机制说明等,这些安全性的要求不应该来自实验,而应该通过大量实践运行,这才能够证明EOS具备超越以太坊的能力。

当前威胁级别:

较低
 
作者:季宙栋
文章来源:知乎
  查看全部
今天我们来看下EOS(纯技术角度)

EOS定位下一代区块链智能合约平台,致力于解决当前区块链技术中的一些关键挑战:性能、用户体验和治理。目前,EOS处于待发布测试网络的阶段; 没有生产运行的区块链、虚拟机、智能合约开发环境。EOS基于开发Bitshares和Steem平台的多年实践经验,最关键的是该项目“不差钱”。

EOS宣称颠覆以太坊的几大方面:更高的交易吞吐量、0成本交易和结构化治理。下面我们进一步了解一下。

交易吞吐量

EOS通过引入(如代理权益证明(DPoS))、并行处理、加快验证和其他优化技术来实现超越以太坊的性能水平。当然,Ethereum生态系统也正在研究和开发类似的改进。

尽管听着相似,但是EOS的代理权益证明共识机制与Ethereum提出的Casper协议几乎没有共同之处。在EOS中,由一组21名当选者负责轮流出块。这种模式必须高度信任这些当选者,EOS假设去中心化投票过程可以消除恶意/错误的当选者。而在Casper中,任何愿意存入ETH的人都可以参与共识,恶意/错误的行为将因保证金损失而受到惩罚。目前,以太坊正在严格地实施理论验证,并谨慎地分阶段实施PoS切换,而EOS先期会对Bitshares的DPoS进行重新包装上线,主网可能要等到Ethereum完全转变为纯PoS实施很久后才开始运行。所以EOS所使用的DPoS算法能否在全网有巨大经济价值时可以抵御串通/抵制审查/拒绝服务(DoS)攻击等风险还有待观察。

EOS通过对操作不同账户的交易采取并行执行的方式来提高吞吐率。EOS白皮书描述了一种将区块分解为并行线程的方法,但缺少如何完成独立事务确定性的细节。Ethereum的EIP 648描述了一种在现有区块结构中进行并行事务处理的机制。目前不清楚是EOS还是以太坊谁会先支持并行处理,是否能带来显著的性能优势同样有待验证。

理论上,可以通过仅验证事务的子集来实现性能提升。EOS白皮书描述了部分验证的好处和挑战,但没有提供实施细节。在以太坊中,对加速验证做了大量研究分析(总结在这里),不过社区还没形成一个工程解决方案。两者都处于理论验证期,需要大量时间积累经验并投入生产。

EOS虚拟机支持Web Assembly指令集,它允许预编译的合约接近原始程序的执行效率。而Ethereum Flavored Web Assembly(eWASM)项目正在寻找兼容现有智能合约的方式替换EVM。

在提升交易TPS的问题上,EOS可能具备先发优势,因为它无需承担网络巨大经济体量的风险。如果以太坊不能快速跟进,可能会失去市场份额。不过,随着EOS网络的价值(代币价值)增加,它可能会吸引不可预知的新型攻击,黑客们会利用EOS高性能设计挖掘漏洞,所以,这非常考验EOS的投票机制来预防这种攻击。

无需"燃料"的交易

EOS和Ethereum交易均依赖代币。不同的是,在EOS中,通过向矿工证明存款额获取交易资格,而Ethereum用户直接向矿工支付“燃料”手续费。

EOS凭借免费交易模式来推广应用服务(即智能合约),这种变相补贴模式是一种常见的互联网玩法,用户可以“免费”使用服务,通过其他方式获取利润。但是,公有链设置交易费用的目的主要是提高垃圾交易和DoS攻击的成本,保护智能合约和区块链免受攻击。任何公有链如果发生类似的攻击事件,可能需要付出昂贵代价的硬分叉来解决。

EOS通过使用动态部分预留系统来为用户分配交易所需的带宽,网络根据持有代币占比为用户分配交易所需带宽,并且会参考当时网络的拥塞程度动态调整。通过动态收紧预留,增加攻击的总体成本来抵御攻击。在现有环境下,这种自适应的防御方式可以为EOS带来一定优势,因为以太坊的交易价格是预先设定的。如果这种模式有效,以太坊可以通过两种方式来弥补劣势:1)DApps可以对用户实施交易费返还;2)大都会版本允许由合约支付燃料费用。这些措施的好处是,如果事实证明交易费用对某些场景是必要的,那么可以在每个应用程序上自主设置交易双方谁支付交易费的机制提供了较好的灵活性。

结构化治理

以太坊的治理结构由开发者、矿工和用户组成。协议的升级更新是借由EIP以太坊改进建议的社区驱动模式来管理的,但是一些容量参数(例如区块燃料限制)可以由矿工动态调整。

以太坊的治理遭受了DAO事件的考验,其中近15%的ETH被盗。找回资金的硬分叉由一群意见领袖提出并获得社区大多数人的支持,最终这导致了一次网络分叉,反对的人选择支持原链(即以太经典)。这次事件被认为降低了网络的安全性和整体价值,因此越来越多人开始讨论结构化治理结构,可以在不产生社区分裂的情况下解决问题。在社区中提出了许多链上治理机制的提案(EIP182),但还没有正式的结构披露出来。

相较而言,EOS白皮书描述了协议内置的一些机制。在EOS中由用户选出的记账者负责执行某些治理职能,占多数的(17/21或大约80%)当选者可以有权冻结账户、更新有缺陷的智能合约代码、决策是否分叉。如果当选者的权力不被滥用,就可以有效防范盗窃或故障事件。EOS希望通过系统规则保障大多数人的利益,然而,但通过采用投票和少数服从多数的规则,EOS希望有系统地为大多数人谋利益。唯一不确定的是,用户会愿意将自己的权力交给少数代表,或者这种结构可以阻止少数人的分裂。

结论

EOS提出了一系列性能优化、降低交易手续费、改善治理的解决方案。这些机制的实现高度依赖全体用户对21位当选代表的信任,用户需要利用投票权来防止当选者的作恶行为。

如果这些机制在达到一定网络规模后被验证有效,EOS将在分布式账本领域取得重大进展。在以太坊上发生的智能合约安全事件提醒我们,导致黑客能够从用户账号盗取数百万的漏洞永远是最紧急和最重要的问题,而交易TPS和交易成本永远是次要的。

目前,最有可能超越以太坊的平台应当是提供了更好的智能合约安全性,同时兼具一定的可扩展性。很可惜,EOS的总体设计并不是这个方向,其设计的重心在于功能性上强于以太坊,安全性并未经过严格的工程证明。而以太坊的有关白皮书包括安全性证明、攻击预估成本、故障阈值和其他安全性设计的参数,而EOS有关白皮书则主要介绍基础工作机制,显然欠缺对安全性的描述。不过我们相信,未来EOS一定会发布更加详细的攻击成本分析、安全机制说明等,这些安全性的要求不应该来自实验,而应该通过大量实践运行,这才能够证明EOS具备超越以太坊的能力。

当前威胁级别:

较低

 
作者:季宙栋
文章来源:知乎
 

EOS学习笔记1-EOS Command Line Client (eosc)

EOS代码分析郑浩 发表了文章 • 1 个评论 • 948 次浏览 • 2017-09-19 11:43 • 来自相关话题

大家好,EOS发布了DAWN1.0版本,我按照官方的文档安装做了下测试,分享给大家,我建了一个EOS的中文爱好者社区,欢迎各位EOS爱好者来这里讨论EOS www.eos.top
 

 内容介绍
EOSC介绍创建钱包将私钥导入到钱包锁定和解锁钱包打开钱包创建账户转账获取交易信息创建一个合约向合约推送消息。查询合约链接特定的节点。使用单独的钱包应用程序。跳过签名部分。附加文档。
 
EOSC钱包介绍
 
eosc是一个和eosd暴露的REST api交互的命令行工具。为了eosc的正常使用,你需要在本地运行一个eosd的副本并在配置文件config.ini中载入'plugin = eos::chain_api_plugin'。为了签署交易并推送到区块链中,你需要载入‘plugin = eos::wallet_api_plugin’。为了查询账户的交易和历史记录,你需要载入 'eos::account_history_api_plugin' 。# Plugin(s) to enable, may be specified multiple times
plugin = eos::producer_plugin
plugin = eos::chain_api_plugin
plugin = eos::wallet_api_plugin
plugin = eos::account_history_api_plugin当你启动eosd后,你应该可以查询当前的区块链状态$ ./eosc get info
{
"head_block_num": 1635,
"last_irreversible_block_num": 1618,
"head_block_id": "000006638f62a7a03a2d9140d2c9889c148bb62a2c9f6f5efd12d364b1fa5f60",
"head_block_time": "2017-09-19T03:56:24",
"head_block_producer": "initj",
"recent_slots": "0000000000000000000000000000000000000000000000000000000000001111",
"participation_rate": "0.06250000000000000"
}





 
创建钱包
 
任何发送到区块链的交易都需要用所有者各自的私钥进行签名。在你签名交易之前,你需要一个钱包来储存和管理私钥。$ ./eosc wallet create
Creating wallet: default
Save password to use in the future to unlock this wallet.
Without password imported keys will not be retrievable.
"PW5JD9cw9YY288AXPvnbwUk5JK4Cy6YyZ83wzHcshu8F2akU9rRWE这将在eos-walletd中创建一个名为‘default’的钱包,并返回钱包密码,请将钱包密码保存好,以后可以用来解锁钱包。
 
你可以指定名称来创建多个不同的钱包。$ ./eosc wallet create -n zhenghao
Creating wallet: zhenghao
Save password to use in the future to unlock this wallet.
Without password imported keys will not be retrievable.
"PW5KjS8oPZnfXZeE4RmYnWGfegKa5vHH2zZkaEC7Jms7L1xSmb7v1"





以上命令创建了名称为‘zhenghao’的钱包,你也可以查看你的钱包列表。$ ./eosc wallet list
Wallets:
[
"default *",
"zhenghao *"
]






注意,如果你没有指定特定的钱包名称,对于钱包的任何操作都都归于‘default’默认钱包。
 

 
将私钥导入钱包
 
将私钥导入你想用来签名的钱包中。下面将会导入创世账户(比如,inita,initb,initc,...,initu),在config.ini中。$ ./eosc wallet import 5KQwrPbwdL6PhXujxW37FSSQZ1JiwsST4cqQzDeyXtP79zkvFD3
imported private key for: EOS6MRyAjQq8ud7hVNYcfnVPJqcVpscN5So8BhtHuGYqET5GDW5CV




你之后可以看到导入的私钥和对应的公钥。$ ./eosc wallet keys
[[
"EOS6MRyAjQq8ud7hVNYcfnVPJqcVpscN5So8BhtHuGYqET5GDW5CV",
"5KQwrPbwdL6PhXujxW37FSSQZ1JiwsST4cqQzDeyXtP79zkvFD3"
]
]
 
 锁定和解锁钱包
 
为了保证你的私钥安全,锁定你的钱包。~/eos/build/programs/eosc$ ./eosc wallet lock -n zhenghao
Locked: 'zhenghao'

~/eos/build/programs/eosc$ ./eosc wallet lock
Locked: 'default'使用你刚才创建钱包时生成的特定的密钥来解锁钱包。$ ./eosc wallet unlock -n zhenghao --password PW5KjS8oPZnfXZeE4RmYnWGfegKa5vHH2zZkaEC7Jms7L1xSmb7v1
Unlocked: 'zhenghao'

$./eosc wallet unlock --password PW5JPrtWhD686dktsNHe6XfnxudY7fJVVb5fDVsFuigkuBzXGhrpJ
Unlocked: 'default'
这时你就可以在列表中看到你的钱包了$ ./eosc wallet list
Wallets:
[
"default *",
"zhenghao *"
]






注意,钱包默认处于关闭状态。

 
创建一个账户
 
为了创建一个账户,你需要使用两个密钥:owner和active。你可以使用eosc来创建一些密钥对。
 
这将是你的owner key.$ ./eosc create key
Private key: 5KELdbfiBrFaix5K8ZEArCGjfQkGgyXqziTdqGcv5koR8faPybj
Public key: EOS6NpEqWi177VKQkuJQL9V6Y3LqAAp9C2jDsAagMW4uELw72Z2oP这将是你的active key。./eosc create key
Private key: 5KdEcZfHat6DR4hAK1XYZ76hBR93riRz3HpKZrk3yN5a99uZvu4
Public key: EOS5V8geYBkAEtCcs5TMgMsWJqsRk5CMyh5jCvPxbGtGDfnnSXjqP

注意,eosc不会保存生成的私钥。

 
 
接下来我们创建一个名称为tester的账号,但因为所有的账户都需要用已有账户来创建,我们将使用inita账户的owener key和active key来创建tester,inita由创世文件来规定。
为了使用inita来推送交易,你首先要导入inita的私钥到你的钱包。(参见将私钥导入钱包)
那么我们来创建一个名为tester的账户。$ ./eosc create account inita tester EOS6NpEqWi177VKQkuJQL9V6Y3LqAAp9C2jDsAagMW4uELw72Z2oP EOS5V8geYBkAEtCcs5TMgMsWJqsRk5CMyh5jCvPxbGtGDfnnSXjqP
{
"transaction_id": "4bdb92e134342df2ecf33e87120b80da4c1e0ff621e6e4b92ff78aa37b85204c",
"processed": {
"refBlockNum": 4844,
"refBlockPrefix": 3320117640,
"expiration": "2017-09-19T06:37:06",
"scope": [
"eos",
"inita"
],
"signatures": [
"1f28c6969974f32810a35f4fe8e007f848fe86c2b15950ba65095c13bd50a9cbe966e5cd855d4ece025a84bfc2960554b8780cd9b844cd27ff53c193abad803629"
],
"messages": [{
"code": "eos",
"type": "newaccount",
"authorization": [{
"account": "inita",
"permission": "active"
}
],
"data": {
"creator": "inita",
"name": "tester",
"owner": {
"threshold": 1,
"keys": [{
"key": "EOS6NpEqWi177VKQkuJQL9V6Y3LqAAp9C2jDsAagMW4uELw72Z2oP",
"weight": 1
}
],
"accounts":
},
"active": {
"threshold": 1,
"keys": [{
"key": "EOS5V8geYBkAEtCcs5TMgMsWJqsRk5CMyh5jCvPxbGtGDfnnSXjqP",
"weight": 1
}
],
"accounts":
},
"recovery": {
"threshold": 1,
"keys": ,
"accounts": [{
"permission": {
"account": "inita",
"permission": "active"
},
"weight": 1
}
]
},
"deposit": "0.0001 EOS"
},
"hex_data": "000000008040934b00000000004067a1010000000102c4034b92a688a8ee82f57f4406c927f48957cc81b705117522613f38a63b53310100000100000001024ea9a0b042693d858ef159eaf32a91afdb9ac16bfa2c29ad33e5a3c14f045727010000010000000001000000008040934b00000000149be8080100010000000000000004454f5300000000"
}
],
"output": [{
"notify": [],
"deferred_transactions":
}
]
}
}





现在你可以看到tester是inita的一个controlled_account。$ ./eosc get servants inita
{
"controlled_accounts": [
"tester"
]
}
 
转账
在创建账户之后,我们可以查看当前账户的状态。$ ./eosc get account tester
{
"name": "tester",
"eos_balance": 0,
"staked_balance": 1,
"unstaking_balance": 0,
"last_unstaking_time": "1969-12-31T23:59:59",
"permissions": [{
"name": "active",
"parent": "owner",
"required_auth": {
"threshold": 1,
"keys": [{
"key": "EOS7d9A3uLe6As66jzN8j44TXJUqJSK3bFjjEEqR4oTvNAB3iM9SA",
"weight": 1
}
],
"accounts":
}
},{
"name": "owner",
"parent": "owner",
"required_auth": {
"threshold": 1,
"keys": [{
"key": "EOS4toFS3YXEQCkuuw1aqDLrtHim86Gz9u3hBdcBw5KNPZcursVHq",
"weight": 1
}
],
"accounts":
}
}
]
}
你会注意到账号余额为零,因为所有的EOS代币当前都分配给了eos账户和创世账户。$ ./eosc get account eos
{
"name": "eos",
"eos_balance": "69000000.0000 EOS",
"staked_balance": "0.0000 EOS",
"unstaking_balance": "0.0000 EOS",
"last_unstaking_time": "1969-12-31T23:59:59",
"permissions":
}





既然我们有创世账户(比如inita,initb,initc等)的私钥,我们就可以通过任一创世账户使用eosc的以下命令行给tester账户充值。$ ./eosc transfer inita tester 1000
{
"transaction_id": "311ae5affaed2ba943e041dd52000557b3ac9aeda5c80c4ae8cf9156fefe505d",
"processed": {
"refBlockNum": 5104,
"refBlockPrefix": 2510363935,
"expiration": "2017-09-19T06:50:06",
"scope": [
"inita",
"tester"
],
"signatures": [
"1f1b08a06383e1b06fe9298437022abce7ccf362ed6df9438f619c65f3c130c7766aa83d8689fcc16a36c25f7318471a378a42882728112ebb1b010636d156f0db"
],
"messages": [{
"code": "eos",
"type": "transfer",
"authorization": [{
"account": "inita",
"permission": "active"
}
],
"data": {
"from": "inita",
"to": "tester",
"amount": 1000,
"memo": ""
},
"hex_data": "000000008040934b00000000c84267a1e80300000000000000"
}
],
"output": [{
"notify": [{
"name": "tester",
"output": {
"notify": [],
"deferred_transactions":
}
},{
"name": "inita",
"output": {
"notify": ,
"deferred_transactions":
}
}
],
"deferred_transactions":
}
]
}
}





 
现在我们可以验证我们收到的资产。$ ./eosc get account tester
{
"name": "tester",
"eos_balance": "0.1000 EOS",
"staked_balance": "0.0001 EOS",
"unstaking_balance": "0.0000 EOS",
"last_unstaking_time": "1969-12-31T23:59:59",
"permissions": [{
"name": "active",
"parent": "owner",
"required_auth": {
"threshold": 1,
"keys": [{
"key": "EOS7d9A3uLe6As66jzN8j44TXJUqJSK3bFjjEEqR4oTvNAB3iM9SA",
"weight": 1
}
],
"accounts":
}
},{
"name": "owner",
"parent": "owner",
"required_auth": {
"threshold": 1,
"keys": [{
"key": "EOS4toFS3YXEQCkuuw1aqDLrtHim86Gz9u3hBdcBw5KNPZcursVHq",
"weight": 1
}
],
"accounts":
}
}
]
}





 
获取交易信息
 
使用account_history_api_plugin,我们可以查询特定的交易。$ ./eosc get transaction eb4b94b72718a369af09eb2e7885b3f494dd1d8a20278a6634611d5edd76b703
{
"transaction_id": "eb4b94b72718a369af09eb2e7885b3f494dd1d8a20278a6634611d5edd76b703",
"processed": {
"refBlockNum": 2206,
"refBlockPrefix": 221394282,
"expiration": "2017-09-05T08:03:58",
"scope": [
"inita",
"tester"
],
"signatures": [
"1f22e64240e1e479eee6ccbbd79a29f1a6eb6020384b4cca1a958e7c708d3e562009ae6e60afac96f9a3b89d729a50cd5a7b5a7a647540ba1678831bf970e83312"
],
"messages": [{
"code": "eos",
"type": "transfer",
"authorization": [{
"account": "inita",
"permission": "active"
}
],
"data": {
"from": "inita",
"to": "tester",
"amount": 1000,
"memo": ""
},
"hex_data": "000000008040934b00000000c84267a1e80300000000000000"
}
],
"output": [{
"notify": [{
"name": "tester",
"output": {
"notify": [],
"sync_transactions": ,
"async_transactions":
}
},{
"name": "inita",
"output": {
"notify": ,
"sync_transactions": ,
"async_transactions":
}
}
],
"sync_transactions": ,
"async_transactions":
}
]
}
}
同样我们可以查询一个特定账户重开始到最近一次的交易记录。$ ./eosc get transactions inita
[
{
"transaction_id": "eb4b94b72718a369af09eb2e7885b3f494dd1d8a20278a6634611d5edd76b703",
...
},
{
"transaction_id": "6acd2ece68c4b86c1fa209c3989235063384020781f2c67bbb80bc8d540ca120",
...
},
...
]
 
创建智能合约
 
在这一部分我们将使用eosc来创建一个并发布一个货币合约。你可以在eos/contracts/currency 文件夹中找到货币合约的例子。
第一步为货币来创建一个账户。我们将使用inita来创建一个currency账户。请确认你的inita的私钥已导入。$ ./eosc create account inita currency EOS6NpEqWi177VKQkuJQL9V6Y3LqAAp9C2jDsAagMW4uELw72Z2oP EOS5V8geYBkAEtCcs5TMgMsWJqsRk5CMyh5jCvPxbGtGDfnnSXjqP
{
"transaction_id": "7ec42f095b2c39f9b854ec2262cec949f7107051dbc5fdd68d6776091f5567db",
"processed": {
"refBlockNum": 5460,
"refBlockPrefix": 3499954811,
"expiration": "2017-09-19T07:07:57",
"scope": [
"eos",
"inita"
],
"signatures": [
"1f5a82513f293e1a053ebda13718ffc40dd0d81876ebf5302665083d1f0c261c0623b37480459cbd3b49d03ed7d50456f0d8bb665c2dc43914192f30e1e13bb9a4"
],
"messages": [{
"code": "eos",
"type": "newaccount",
"authorization": [{
"account": "inita",
"permission": "active"
}
],
"data": {
"creator": "inita",
"name": "currency",
"owner": {
"threshold": 1,
"keys": [{
"key": "EOS6NpEqWi177VKQkuJQL9V6Y3LqAAp9C2jDsAagMW4uELw72Z2oP",
"weight": 1
}
],
"accounts":
},
"active": {
"threshold": 1,
"keys": [{
"key": "EOS5V8geYBkAEtCcs5TMgMsWJqsRk5CMyh5jCvPxbGtGDfnnSXjqP",
"weight": 1
}
],
"accounts":
},
"recovery": {
"threshold": 1,
"keys": ,
"accounts": [{
"permission": {
"account": "inita",
"permission": "active"
},
"weight": 1
}
]
},
"deposit": "0.0001 EOS"
},
"hex_data": "000000008040934b00000079b822651d010000000102c4034b92a688a8ee82f57f4406c927f48957cc81b705117522613f38a63b53310100000100000001024ea9a0b042693d858ef159eaf32a91afdb9ac16bfa2c29ad33e5a3c14f045727010000010000000001000000008040934b00000000149be8080100010000000000000004454f5300000000"
}
],
"output": [{
"notify": [],
"deferred_transactions":
}
]
}
}





 
下一步是发布合约(.wast)和他的abi(.abi)
我们需要将currency的active key导入到钱包中。$ ./eosc wallet import 5Hv22aPcjnENBv6X9o9nKGdkfrW44En6z4zJUt2PobAvbQXrT9z
imported private key for: EOS7d9A3uLe6As66jzN8j44TXJUqJSK3bFjjEEqR4oTvNAB3iM9SA




之后继续设置代码。./eosc set contract currency /.../.../eos/build/contracts/currency/currency.wast /.../.../eos/build/contracts/currency/currency.abi
Reading WAST...
Assembling WASM...
Publishing contract...
{
"transaction_id": "a7591a16f902b4c595b8ffbb220f588abd0172897c40fa689b9133dca3dd2bfc",
"processed": {
"refBlockNum": 5668,
"refBlockPrefix": 502401204,
"expiration": "2017-09-19T07:18:21",
"scope": [
"currency",
"eos"
],
"signatures": [
"1f581f8d46798049648f21bdd7c74c1117813754bb3cf6d3152b0a5da9ca5a269b7d0b2875a5ef94a62bd9ee69fe7bfd84435819b9bf1a7d77e6dd32876d2defca"
],
"messages": [{
"code": "eos",
"type": "setcode",
"authorization": [{
"account": "currency",
"permission": "active"
}
],
"data": "00000079b8......636f756e74"
}
],
"output": [{
"notify": [],
"deferred_transactions":
}
]
}
}





向合约推送消息
 
在合约发布之后,所有的货币初始会分配给currency账户。因此让我们转给tester一些。
 
我们可以区块链合约的.abi,我们可以查看可以使用的操作的列表,和特定的消息结构。$ ./eosc get code -a currency.abi currency
code hash: a1c8c84b4700c09c8edb83522237439e33cf011a4d7ace51075998bd002e04c9
saving abi to currency.abi




$ cat currency.abi
{
"types": [{
"newTypeName": "AccountName",
"type": "Name"
}
],
"structs": [{
"name": "transfer",
"base": "",
"fields": {
"from": "AccountName",
"to": "AccountName",
"amount": "UInt64"
}
},{
"name": "account",
"base": "",
"fields": {
"account": "Name",
"balance": "UInt64"
}
}
],
"actions": [{
"action": "transfer",
"type": "transfer"
}
],
"tables": [{
"table": "account",
"indextype": "i64",
"keynames": [
"account"
],
"keytype": ,
"type": "account"
}
]





通过上面的abi我们可以看到currency合约接受一个叫transfer的操作,可以接收from,to,和amount的消息。$ ./eosc push message currency transfer '{"from":"currency","to":"tester","amount":50}'-S currency -S tester -p currency@active
1900201ms thread-0 main.cpp:841 operator() ] Converting argument to binary...
{
"transaction_id": "ca09079cf2bf3119936302f328229dac62d606f764beb5fb98d9662a9cc4364f",
"processed": {
"refBlockNum": 5934,
"refBlockPrefix": 1385229449,
"expiration": "2017-09-19T07:31:39",
"scope": [
"currency",
"tester"
],
"signatures": [
"1f519783cbf870fa3587f285ec8291a1797767b81f045cdc329e44e849dda09bbb07675dd74fc8a94cb9b2290e27bdd9d7da8c76a5dbec3bbd252d13b82f111213"
],
"messages": [{
"code": "currency",
"type": "transfer",
"authorization": [{
"account": "currency",
"permission": "active"
}
],
"data": {
"from": "currency",
"to": "tester",
"amount": 50
},
"hex_data": "00000079b822651d00000000c84267a13200000000000000"
}
],
"output": [{
"notify": [{
"name": "tester",
"output": {
"notify": [],
"deferred_transactions":
}
}
],
"deferred_transactions":
}
]
}
}





现在我们可以通过tester账户给inita转账了,这需要tester的权限。这样会把tester的账户余额减为0.$ ./eosc push message currency transfer '{"from":"tester","to":"inita","amount":50}' -S inita -S tester -p tester@active
2123324ms thread-0 main.cpp:841 operator() ] Converting argument to binary...
{
"transaction_id": "deddce1b35d08d905db8a30d9329280914476b3bbd715e68d2f4de57cc2d87a2",
"processed": {
"refBlockNum": 6008,
"refBlockPrefix": 1583570563,
"expiration": "2017-09-19T07:35:21",
"scope": [
"inita",
"tester"
],
"signatures": [
"2078629ee49addd2c85625110ad11504f923ff6d4aff275b47bd676e60d8692cd8340197d983fe1bfa94739101a396bb44edb76a46cdd763461c2b9a76fa423983"
],
"messages": [{
"code": "currency",
"type": "transfer",
"authorization": [{
"account": "tester",
"permission": "active"
}
],
"data": {
"from": "tester",
"to": "inita",
"amount": 50
},
"hex_data": "00000000c84267a1000000008040934b3200000000000000"
}
],
"output": [{
"notify": [{
"name": "inita",
"output": {
"notify": [],
"deferred_transactions":
}
},{
"name": "tester",
"output": {
"notify": ,
"deferred_transactions":
}
}
],
"deferred_transactions":
}
]
}
}





现在tester的余额为0,如果你再次尝试转账,将会失败。$ ./eosc push message currency transfer '{"from":"tester","to":"inita","amount":50}' -S inita -S tester -p tester@active
3543610ms thread-0 main.cpp:271 operator() ] Converting argument to binary...
3543615ms thread-0 main.cpp:311 main ] Failed with error: 10 assert_exception: Assert Exception
status_code == 200: Error
: 10 assert_exception: Assert Exception
test: assertion failed: integer underflow subtracting token balance
{"s":"integer underflow subtracting token balance","ptr":176}
thread-1 wasm_interface.cpp:248 assertnonei32i32
[...snipped...]
查询合约
 
在执行完货币合约的操作后,我们可以通过查看货币账户表来验证每个帐户持有的代币数量。
此表存储在每个帐户的范围内,而不是在currency账户范围内。$ ./eosc get table tester currency account
{
"rows": ,
"more": true
}




./eosc get table inita currency account
{
"rows": [{
"account": "account",
"balance": 100
}
],
"more": true
}





 
 
 
连接特定节点。
缺省设置中,eosc将会连接跑在本地端口8888的节点。你可以通过指定主机地址和端口来连接另外一个eosd节点。
 
 
使用单独的钱包应用程序
除了使用eosd中内置的钱包功能,你可以使用一个独立的钱包应用程序,在programs/eos-walletd文件夹里可以找到。缺省设置中,8888端口被eosd占用了,因此选择其它端口。./eos-walletd --http-server-endpoint 127.0.0.1:8887





3354954ms thread-0   wallet_plugin.cpp:30          plugin_initialize    ] initializing wallet plugin
3354966ms thread-0   http_plugin.cpp:132           plugin_initialize    ] host: 127.0.0.1 port: 8887 
3354967ms thread-0   http_plugin.cpp:135           plugin_initialize    ] configured http to listen on 127.0.0.1:8887
3354968ms thread-0   http_plugin.cpp:147           plugin_startup       ] start processing http thread
3354980ms thread-0   http_plugin.cpp:195           plugin_startup       ] start listening for http requests
3355005ms thread-0   http_plugin.cpp:200           plugin_startup       ] http io service exit
3355005ms thread-0   wallet_api_plugin.cpp:64      plugin_startup       ] starting wallet_api_plugin
3355006ms thread-0   http_plugin.cpp:224           add_handler          ] add api url: /v1/wallet/create
3355006ms thread-0   http_plugin.cpp:224           add_handler          ] add api url: /v1/wallet/get_public_keys
3355006ms thread-0   http_plugin.cpp:224           add_handler          ] add api url: /v1/wallet/import_key
3355006ms thread-0   http_plugin.cpp:224           add_handler          ] add api url: /v1/wallet/list_keys
3355006ms thread-0   http_plugin.cpp:224           add_handler          ] add api url: /v1/wallet/list_wallets
3355006ms thread-0   http_plugin.cpp:224           add_handler          ] add api url: /v1/wallet/lock
3355006ms thread-0   http_plugin.cpp:224           add_handler          ] add api url: /v1/wallet/lock_all
3355007ms thread-0   http_plugin.cpp:224           add_handler          ] add api url: /v1/wallet/open
3355007ms thread-0   http_plugin.cpp:224           add_handler          ] add api url: /v1/wallet/set_timeout
3355007ms thread-0   http_plugin.cpp:224           add_handler          ] add api url: /v1/wallet/sign_transaction
3355007ms thread-0   http_plugin.cpp:224           add_handler          ] add api url: /v1/wallet/unlock






之后任何操作都需要签名,使用-wallet-host和-wallet-port 选项。./eosc --wallet-host 127.0.0.1 --wallet-port 8887 <COMMAND> <SUBCOMMAND> <PARAMS>





 
 跳过签名部分
 对于开发者有个简单的方法来测试各项功能,eosd可以运行但不处理私钥签名,这样交易签名就不需要了。./eosd --skip-transaction-signatures
之后任何需要签名的操作,需要使用-s选项。./eosc <COMMAND> <SUBCOMMAND> -s <PARAMS>




 
 

附加文档
eosc里面包含了所有命令的文档,简单的运行不带参数的命令,就可以得到eosc的全部命令列表。$ ./eosc
ERROR: RequiredError: Subcommand required
Command Line Interface to Eos Daemon
Usage: ./eosc [OPTIONS] SUBCOMMAND

Options:
-h,--help Print this help message and exit
-H,--host TEXT=localhost the host where eosd is running
-p,--port UINT=8888 the port where eosd is running
--wallet-host TEXT=localhost
the host where eos-walletd is running
--wallet-port UINT=8888 the port where eos-walletd is running
-v,--verbose output verbose messages on error

Subcommands:
create Create various items, on and off the blockchain
get Retrieve various items and information from the blockchain
set Set or update blockchain state
transfer Transfer EOS from account to account
wallet Interact with local wallet
benchmark Configure and execute benchmarks
push Push arbitrary transactions to the blockchain
ubuntu@ubuntu:~/eos/build/programs/eosc$





为了得到任何特定的子命令的帮助,同样使用不带参数运行的方法。$ ./eosc create
ERROR: RequiredError: Subcommand required
Create various items, on and off the blockchain
Usage: ./eosc create SUBCOMMAND

Subcommands:
key Create a new keypair and print the public and private keys
account Create a new account on the blockchain
producer Create a new producer on the blockchain
ubuntu@ubuntu:~/eos/build/programs/eosc$





 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
  查看全部
大家好,EOS发布了DAWN1.0版本,我按照官方的文档安装做了下测试,分享给大家,我建了一个EOS的中文爱好者社区,欢迎各位EOS爱好者来这里讨论EOS www.eos.top
 

 内容介绍
  1. EOSC介绍
  2. 创建钱包
  3. 将私钥导入到钱包
  4. 锁定和解锁钱包
  5. 打开钱包
  6. 创建账户
  7. 转账
  8. 获取交易信息
  9. 创建一个合约
  10. 向合约推送消息。
  11. 查询合约
  12. 链接特定的节点。
  13. 使用单独的钱包应用程序。
  14. 跳过签名部分。
  15. 附加文档。

 
EOSC钱包介绍
 
eosc是一个和eosd暴露的REST api交互的命令行工具。为了eosc的正常使用,你需要在本地运行一个eosd的副本并在配置文件config.ini中载入'plugin = eos::chain_api_plugin'。为了签署交易并推送到区块链中,你需要载入‘plugin = eos::wallet_api_plugin’。为了查询账户的交易和历史记录,你需要载入 'eos::account_history_api_plugin' 。
# Plugin(s) to enable, may be specified multiple times
plugin = eos::producer_plugin
plugin = eos::chain_api_plugin
plugin = eos::wallet_api_plugin
plugin = eos::account_history_api_plugin
当你启动eosd后,你应该可以查询当前的区块链状态
$ ./eosc get info
{
"head_block_num": 1635,
"last_irreversible_block_num": 1618,
"head_block_id": "000006638f62a7a03a2d9140d2c9889c148bb62a2c9f6f5efd12d364b1fa5f60",
"head_block_time": "2017-09-19T03:56:24",
"head_block_producer": "initj",
"recent_slots": "0000000000000000000000000000000000000000000000000000000000001111",
"participation_rate": "0.06250000000000000"
}





 
创建钱包
 
任何发送到区块链的交易都需要用所有者各自的私钥进行签名。在你签名交易之前,你需要一个钱包来储存和管理私钥。
$ ./eosc wallet create
Creating wallet: default
Save password to use in the future to unlock this wallet.
Without password imported keys will not be retrievable.
"PW5JD9cw9YY288AXPvnbwUk5JK4Cy6YyZ83wzHcshu8F2akU9rRWE
这将在eos-walletd中创建一个名为‘default’的钱包,并返回钱包密码,请将钱包密码保存好,以后可以用来解锁钱包。
 
你可以指定名称来创建多个不同的钱包。
$ ./eosc wallet create -n zhenghao
Creating wallet: zhenghao
Save password to use in the future to unlock this wallet.
Without password imported keys will not be retrievable.
"PW5KjS8oPZnfXZeE4RmYnWGfegKa5vHH2zZkaEC7Jms7L1xSmb7v1"





以上命令创建了名称为‘zhenghao’的钱包,你也可以查看你的钱包列表。
$ ./eosc wallet list
Wallets:
[
"default *",
"zhenghao *"
]






注意,如果你没有指定特定的钱包名称,对于钱包的任何操作都都归于‘default’默认钱包。
 


 
将私钥导入钱包
 
将私钥导入你想用来签名的钱包中。下面将会导入创世账户(比如,inita,initb,initc,...,initu),在config.ini中。
$ ./eosc wallet import 5KQwrPbwdL6PhXujxW37FSSQZ1JiwsST4cqQzDeyXtP79zkvFD3
imported private key for: EOS6MRyAjQq8ud7hVNYcfnVPJqcVpscN5So8BhtHuGYqET5GDW5CV




你之后可以看到导入的私钥和对应的公钥。
$ ./eosc wallet keys
[[
"EOS6MRyAjQq8ud7hVNYcfnVPJqcVpscN5So8BhtHuGYqET5GDW5CV",
"5KQwrPbwdL6PhXujxW37FSSQZ1JiwsST4cqQzDeyXtP79zkvFD3"
]
]

 
 锁定和解锁钱包
 
为了保证你的私钥安全,锁定你的钱包。
~/eos/build/programs/eosc$ ./eosc wallet lock -n zhenghao
Locked: 'zhenghao'

~/eos/build/programs/eosc$ ./eosc wallet lock
Locked: 'default'
使用你刚才创建钱包时生成的特定的密钥来解锁钱包。
$ ./eosc wallet unlock -n zhenghao --password PW5KjS8oPZnfXZeE4RmYnWGfegKa5vHH2zZkaEC7Jms7L1xSmb7v1
Unlocked: 'zhenghao'

$./eosc wallet unlock --password PW5JPrtWhD686dktsNHe6XfnxudY7fJVVb5fDVsFuigkuBzXGhrpJ
Unlocked: 'default'

这时你就可以在列表中看到你的钱包了
$ ./eosc wallet list
Wallets:
[
"default *",
"zhenghao *"
]






注意,钱包默认处于关闭状态。


 
创建一个账户
 
为了创建一个账户,你需要使用两个密钥:owner和active。你可以使用eosc来创建一些密钥对。
 
这将是你的owner key.
$ ./eosc create key
Private key: 5KELdbfiBrFaix5K8ZEArCGjfQkGgyXqziTdqGcv5koR8faPybj
Public key: EOS6NpEqWi177VKQkuJQL9V6Y3LqAAp9C2jDsAagMW4uELw72Z2oP
这将是你的active key。
./eosc create key
Private key: 5KdEcZfHat6DR4hAK1XYZ76hBR93riRz3HpKZrk3yN5a99uZvu4
Public key: EOS5V8geYBkAEtCcs5TMgMsWJqsRk5CMyh5jCvPxbGtGDfnnSXjqP


注意,eosc不会保存生成的私钥。


 
 
接下来我们创建一个名称为tester的账号,但因为所有的账户都需要用已有账户来创建,我们将使用inita账户的owener key和active key来创建tester,inita由创世文件来规定。
为了使用inita来推送交易,你首先要导入inita的私钥到你的钱包。(参见将私钥导入钱包
那么我们来创建一个名为tester的账户。
$ ./eosc create account inita tester EOS6NpEqWi177VKQkuJQL9V6Y3LqAAp9C2jDsAagMW4uELw72Z2oP  EOS5V8geYBkAEtCcs5TMgMsWJqsRk5CMyh5jCvPxbGtGDfnnSXjqP
{
"transaction_id": "4bdb92e134342df2ecf33e87120b80da4c1e0ff621e6e4b92ff78aa37b85204c",
"processed": {
"refBlockNum": 4844,
"refBlockPrefix": 3320117640,
"expiration": "2017-09-19T06:37:06",
"scope": [
"eos",
"inita"
],
"signatures": [
"1f28c6969974f32810a35f4fe8e007f848fe86c2b15950ba65095c13bd50a9cbe966e5cd855d4ece025a84bfc2960554b8780cd9b844cd27ff53c193abad803629"
],
"messages": [{
"code": "eos",
"type": "newaccount",
"authorization": [{
"account": "inita",
"permission": "active"
}
],
"data": {
"creator": "inita",
"name": "tester",
"owner": {
"threshold": 1,
"keys": [{
"key": "EOS6NpEqWi177VKQkuJQL9V6Y3LqAAp9C2jDsAagMW4uELw72Z2oP",
"weight": 1
}
],
"accounts":
},
"active": {
"threshold": 1,
"keys": [{
"key": "EOS5V8geYBkAEtCcs5TMgMsWJqsRk5CMyh5jCvPxbGtGDfnnSXjqP",
"weight": 1
}
],
"accounts":
},
"recovery": {
"threshold": 1,
"keys": ,
"accounts": [{
"permission": {
"account": "inita",
"permission": "active"
},
"weight": 1
}
]
},
"deposit": "0.0001 EOS"
},
"hex_data": "000000008040934b00000000004067a1010000000102c4034b92a688a8ee82f57f4406c927f48957cc81b705117522613f38a63b53310100000100000001024ea9a0b042693d858ef159eaf32a91afdb9ac16bfa2c29ad33e5a3c14f045727010000010000000001000000008040934b00000000149be8080100010000000000000004454f5300000000"
}
],
"output": [{
"notify": [],
"deferred_transactions":
}
]
}
}





现在你可以看到tester是inita的一个controlled_account。
$ ./eosc get servants inita
{
"controlled_accounts": [
"tester"
]
}

 
转账
在创建账户之后,我们可以查看当前账户的状态。
$ ./eosc get account tester
{
"name": "tester",
"eos_balance": 0,
"staked_balance": 1,
"unstaking_balance": 0,
"last_unstaking_time": "1969-12-31T23:59:59",
"permissions": [{
"name": "active",
"parent": "owner",
"required_auth": {
"threshold": 1,
"keys": [{
"key": "EOS7d9A3uLe6As66jzN8j44TXJUqJSK3bFjjEEqR4oTvNAB3iM9SA",
"weight": 1
}
],
"accounts":
}
},{
"name": "owner",
"parent": "owner",
"required_auth": {
"threshold": 1,
"keys": [{
"key": "EOS4toFS3YXEQCkuuw1aqDLrtHim86Gz9u3hBdcBw5KNPZcursVHq",
"weight": 1
}
],
"accounts":
}
}
]
}

你会注意到账号余额为零,因为所有的EOS代币当前都分配给了eos账户和创世账户。
$ ./eosc get account eos
{
"name": "eos",
"eos_balance": "69000000.0000 EOS",
"staked_balance": "0.0000 EOS",
"unstaking_balance": "0.0000 EOS",
"last_unstaking_time": "1969-12-31T23:59:59",
"permissions":
}





既然我们有创世账户(比如inita,initb,initc等)的私钥,我们就可以通过任一创世账户使用eosc的以下命令行给tester账户充值。
$ ./eosc transfer inita tester 1000
{
"transaction_id": "311ae5affaed2ba943e041dd52000557b3ac9aeda5c80c4ae8cf9156fefe505d",
"processed": {
"refBlockNum": 5104,
"refBlockPrefix": 2510363935,
"expiration": "2017-09-19T06:50:06",
"scope": [
"inita",
"tester"
],
"signatures": [
"1f1b08a06383e1b06fe9298437022abce7ccf362ed6df9438f619c65f3c130c7766aa83d8689fcc16a36c25f7318471a378a42882728112ebb1b010636d156f0db"
],
"messages": [{
"code": "eos",
"type": "transfer",
"authorization": [{
"account": "inita",
"permission": "active"
}
],
"data": {
"from": "inita",
"to": "tester",
"amount": 1000,
"memo": ""
},
"hex_data": "000000008040934b00000000c84267a1e80300000000000000"
}
],
"output": [{
"notify": [{
"name": "tester",
"output": {
"notify": [],
"deferred_transactions":
}
},{
"name": "inita",
"output": {
"notify": ,
"deferred_transactions":
}
}
],
"deferred_transactions":
}
]
}
}





 
现在我们可以验证我们收到的资产。
$ ./eosc get account tester
{
"name": "tester",
"eos_balance": "0.1000 EOS",
"staked_balance": "0.0001 EOS",
"unstaking_balance": "0.0000 EOS",
"last_unstaking_time": "1969-12-31T23:59:59",
"permissions": [{
"name": "active",
"parent": "owner",
"required_auth": {
"threshold": 1,
"keys": [{
"key": "EOS7d9A3uLe6As66jzN8j44TXJUqJSK3bFjjEEqR4oTvNAB3iM9SA",
"weight": 1
}
],
"accounts":
}
},{
"name": "owner",
"parent": "owner",
"required_auth": {
"threshold": 1,
"keys": [{
"key": "EOS4toFS3YXEQCkuuw1aqDLrtHim86Gz9u3hBdcBw5KNPZcursVHq",
"weight": 1
}
],
"accounts":
}
}
]
}





 
获取交易信息
 
使用account_history_api_plugin,我们可以查询特定的交易。
$ ./eosc get transaction eb4b94b72718a369af09eb2e7885b3f494dd1d8a20278a6634611d5edd76b703
{
"transaction_id": "eb4b94b72718a369af09eb2e7885b3f494dd1d8a20278a6634611d5edd76b703",
"processed": {
"refBlockNum": 2206,
"refBlockPrefix": 221394282,
"expiration": "2017-09-05T08:03:58",
"scope": [
"inita",
"tester"
],
"signatures": [
"1f22e64240e1e479eee6ccbbd79a29f1a6eb6020384b4cca1a958e7c708d3e562009ae6e60afac96f9a3b89d729a50cd5a7b5a7a647540ba1678831bf970e83312"
],
"messages": [{
"code": "eos",
"type": "transfer",
"authorization": [{
"account": "inita",
"permission": "active"
}
],
"data": {
"from": "inita",
"to": "tester",
"amount": 1000,
"memo": ""
},
"hex_data": "000000008040934b00000000c84267a1e80300000000000000"
}
],
"output": [{
"notify": [{
"name": "tester",
"output": {
"notify": [],
"sync_transactions": ,
"async_transactions":
}
},{
"name": "inita",
"output": {
"notify": ,
"sync_transactions": ,
"async_transactions":
}
}
],
"sync_transactions": ,
"async_transactions":
}
]
}
}

同样我们可以查询一个特定账户重开始到最近一次的交易记录。
$ ./eosc get transactions inita
[
{
"transaction_id": "eb4b94b72718a369af09eb2e7885b3f494dd1d8a20278a6634611d5edd76b703",
...
},
{
"transaction_id": "6acd2ece68c4b86c1fa209c3989235063384020781f2c67bbb80bc8d540ca120",
...
},
...
]

 
创建智能合约
 
在这一部分我们将使用eosc来创建一个并发布一个货币合约。你可以在eos/contracts/currency 文件夹中找到货币合约的例子。
第一步为货币来创建一个账户。我们将使用inita来创建一个currency账户。请确认你的inita的私钥已导入。
$ ./eosc create account inita currency EOS6NpEqWi177VKQkuJQL9V6Y3LqAAp9C2jDsAagMW4uELw72Z2oP  EOS5V8geYBkAEtCcs5TMgMsWJqsRk5CMyh5jCvPxbGtGDfnnSXjqP
{
"transaction_id": "7ec42f095b2c39f9b854ec2262cec949f7107051dbc5fdd68d6776091f5567db",
"processed": {
"refBlockNum": 5460,
"refBlockPrefix": 3499954811,
"expiration": "2017-09-19T07:07:57",
"scope": [
"eos",
"inita"
],
"signatures": [
"1f5a82513f293e1a053ebda13718ffc40dd0d81876ebf5302665083d1f0c261c0623b37480459cbd3b49d03ed7d50456f0d8bb665c2dc43914192f30e1e13bb9a4"
],
"messages": [{
"code": "eos",
"type": "newaccount",
"authorization": [{
"account": "inita",
"permission": "active"
}
],
"data": {
"creator": "inita",
"name": "currency",
"owner": {
"threshold": 1,
"keys": [{
"key": "EOS6NpEqWi177VKQkuJQL9V6Y3LqAAp9C2jDsAagMW4uELw72Z2oP",
"weight": 1
}
],
"accounts":
},
"active": {
"threshold": 1,
"keys": [{
"key": "EOS5V8geYBkAEtCcs5TMgMsWJqsRk5CMyh5jCvPxbGtGDfnnSXjqP",
"weight": 1
}
],
"accounts":
},
"recovery": {
"threshold": 1,
"keys": ,
"accounts": [{
"permission": {
"account": "inita",
"permission": "active"
},
"weight": 1
}
]
},
"deposit": "0.0001 EOS"
},
"hex_data": "000000008040934b00000079b822651d010000000102c4034b92a688a8ee82f57f4406c927f48957cc81b705117522613f38a63b53310100000100000001024ea9a0b042693d858ef159eaf32a91afdb9ac16bfa2c29ad33e5a3c14f045727010000010000000001000000008040934b00000000149be8080100010000000000000004454f5300000000"
}
],
"output": [{
"notify": [],
"deferred_transactions":
}
]
}
}





 
下一步是发布合约(.wast)和他的abi(.abi)
我们需要将currency的active key导入到钱包中。
$ ./eosc wallet import 5Hv22aPcjnENBv6X9o9nKGdkfrW44En6z4zJUt2PobAvbQXrT9z
imported private key for: EOS7d9A3uLe6As66jzN8j44TXJUqJSK3bFjjEEqR4oTvNAB3iM9SA




之后继续设置代码。
./eosc set contract currency /.../.../eos/build/contracts/currency/currency.wast /.../.../eos/build/contracts/currency/currency.abi
Reading WAST...
Assembling WASM...
Publishing contract...
{
"transaction_id": "a7591a16f902b4c595b8ffbb220f588abd0172897c40fa689b9133dca3dd2bfc",
"processed": {
"refBlockNum": 5668,
"refBlockPrefix": 502401204,
"expiration": "2017-09-19T07:18:21",
"scope": [
"currency",
"eos"
],
"signatures": [
"1f581f8d46798049648f21bdd7c74c1117813754bb3cf6d3152b0a5da9ca5a269b7d0b2875a5ef94a62bd9ee69fe7bfd84435819b9bf1a7d77e6dd32876d2defca"
],
"messages": [{
"code": "eos",
"type": "setcode",
"authorization": [{
"account": "currency",
"permission": "active"
}
],
"data": "00000079b8......636f756e74"
}
],
"output": [{
"notify": [],
"deferred_transactions":
}
]
}
}





向合约推送消息
 
在合约发布之后,所有的货币初始会分配给currency账户。因此让我们转给tester一些。
 
我们可以区块链合约的.abi,我们可以查看可以使用的操作的列表,和特定的消息结构。
$ ./eosc get code -a currency.abi currency
code hash: a1c8c84b4700c09c8edb83522237439e33cf011a4d7ace51075998bd002e04c9
saving abi to currency.abi




$ cat currency.abi
{
"types": [{
"newTypeName": "AccountName",
"type": "Name"
}
],
"structs": [{
"name": "transfer",
"base": "",
"fields": {
"from": "AccountName",
"to": "AccountName",
"amount": "UInt64"
}
},{
"name": "account",
"base": "",
"fields": {
"account": "Name",
"balance": "UInt64"
}
}
],
"actions": [{
"action": "transfer",
"type": "transfer"
}
],
"tables": [{
"table": "account",
"indextype": "i64",
"keynames": [
"account"
],
"keytype": ,
"type": "account"
}
]





通过上面的abi我们可以看到currency合约接受一个叫transfer的操作,可以接收from,to,和amount的消息。
$  ./eosc push message currency transfer '{"from":"currency","to":"tester","amount":50}'-S currency -S tester -p currency@active
1900201ms thread-0 main.cpp:841 operator() ] Converting argument to binary...
{
"transaction_id": "ca09079cf2bf3119936302f328229dac62d606f764beb5fb98d9662a9cc4364f",
"processed": {
"refBlockNum": 5934,
"refBlockPrefix": 1385229449,
"expiration": "2017-09-19T07:31:39",
"scope": [
"currency",
"tester"
],
"signatures": [
"1f519783cbf870fa3587f285ec8291a1797767b81f045cdc329e44e849dda09bbb07675dd74fc8a94cb9b2290e27bdd9d7da8c76a5dbec3bbd252d13b82f111213"
],
"messages": [{
"code": "currency",
"type": "transfer",
"authorization": [{
"account": "currency",
"permission": "active"
}
],
"data": {
"from": "currency",
"to": "tester",
"amount": 50
},
"hex_data": "00000079b822651d00000000c84267a13200000000000000"
}
],
"output": [{
"notify": [{
"name": "tester",
"output": {
"notify": [],
"deferred_transactions":
}
}
],
"deferred_transactions":
}
]
}
}





现在我们可以通过tester账户给inita转账了,这需要tester的权限。这样会把tester的账户余额减为0.
$ ./eosc push message currency transfer '{"from":"tester","to":"inita","amount":50}' -S inita -S tester -p tester@active
2123324ms thread-0 main.cpp:841 operator() ] Converting argument to binary...
{
"transaction_id": "deddce1b35d08d905db8a30d9329280914476b3bbd715e68d2f4de57cc2d87a2",
"processed": {
"refBlockNum": 6008,
"refBlockPrefix": 1583570563,
"expiration": "2017-09-19T07:35:21",
"scope": [
"inita",
"tester"
],
"signatures": [
"2078629ee49addd2c85625110ad11504f923ff6d4aff275b47bd676e60d8692cd8340197d983fe1bfa94739101a396bb44edb76a46cdd763461c2b9a76fa423983"
],
"messages": [{
"code": "currency",
"type": "transfer",
"authorization": [{
"account": "tester",
"permission": "active"
}
],
"data": {
"from": "tester",
"to": "inita",
"amount": 50
},
"hex_data": "00000000c84267a1000000008040934b3200000000000000"
}
],
"output": [{
"notify": [{
"name": "inita",
"output": {
"notify": [],
"deferred_transactions":
}
},{
"name": "tester",
"output": {
"notify": ,
"deferred_transactions":
}
}
],
"deferred_transactions":
}
]
}
}





现在tester的余额为0,如果你再次尝试转账,将会失败。
$ ./eosc push message currency transfer '{"from":"tester","to":"inita","amount":50}' -S inita -S tester -p tester@active
3543610ms thread-0 main.cpp:271 operator() ] Converting argument to binary...
3543615ms thread-0 main.cpp:311 main ] Failed with error: 10 assert_exception: Assert Exception
status_code == 200: Error
: 10 assert_exception: Assert Exception
test: assertion failed: integer underflow subtracting token balance
{"s":"integer underflow subtracting token balance","ptr":176}
thread-1 wasm_interface.cpp:248 assertnonei32i32
[...snipped...]

查询合约
 
在执行完货币合约的操作后,我们可以通过查看货币账户表来验证每个帐户持有的代币数量。
此表存储在每个帐户的范围内,而不是在currency账户范围内。
$ ./eosc get table tester currency account
{
"rows": ,
"more": true
}




 ./eosc get table inita currency account
{
"rows": [{
"account": "account",
"balance": 100
}
],
"more": true
}





 
 
 
连接特定节点。
缺省设置中,eosc将会连接跑在本地端口8888的节点。你可以通过指定主机地址和端口来连接另外一个eosd节点。
 
 
使用单独的钱包应用程序
除了使用eosd中内置的钱包功能,你可以使用一个独立的钱包应用程序,在programs/eos-walletd文件夹里可以找到。缺省设置中,8888端口被eosd占用了,因此选择其它端口。
./eos-walletd --http-server-endpoint 127.0.0.1:8887





3354954ms thread-0   wallet_plugin.cpp:30          plugin_initialize    ] initializing wallet plugin
3354966ms thread-0   http_plugin.cpp:132           plugin_initialize    ] host: 127.0.0.1 port: 8887 
3354967ms thread-0   http_plugin.cpp:135           plugin_initialize    ] configured http to listen on 127.0.0.1:8887
3354968ms thread-0   http_plugin.cpp:147           plugin_startup       ] start processing http thread
3354980ms thread-0   http_plugin.cpp:195           plugin_startup       ] start listening for http requests
3355005ms thread-0   http_plugin.cpp:200           plugin_startup       ] http io service exit
3355005ms thread-0   wallet_api_plugin.cpp:64      plugin_startup       ] starting wallet_api_plugin
3355006ms thread-0   http_plugin.cpp:224           add_handler          ] add api url: /v1/wallet/create
3355006ms thread-0   http_plugin.cpp:224           add_handler          ] add api url: /v1/wallet/get_public_keys
3355006ms thread-0   http_plugin.cpp:224           add_handler          ] add api url: /v1/wallet/import_key
3355006ms thread-0   http_plugin.cpp:224           add_handler          ] add api url: /v1/wallet/list_keys
3355006ms thread-0   http_plugin.cpp:224           add_handler          ] add api url: /v1/wallet/list_wallets
3355006ms thread-0   http_plugin.cpp:224           add_handler          ] add api url: /v1/wallet/lock
3355006ms thread-0   http_plugin.cpp:224           add_handler          ] add api url: /v1/wallet/lock_all
3355007ms thread-0   http_plugin.cpp:224           add_handler          ] add api url: /v1/wallet/open
3355007ms thread-0   http_plugin.cpp:224           add_handler          ] add api url: /v1/wallet/set_timeout
3355007ms thread-0   http_plugin.cpp:224           add_handler          ] add api url: /v1/wallet/sign_transaction
3355007ms thread-0   http_plugin.cpp:224           add_handler          ] add api url: /v1/wallet/unlock






之后任何操作都需要签名,使用-wallet-host和-wallet-port 选项。
./eosc --wallet-host 127.0.0.1 --wallet-port 8887 <COMMAND> <SUBCOMMAND> <PARAMS>





 
 跳过签名部分
 对于开发者有个简单的方法来测试各项功能,eosd可以运行但不处理私钥签名,这样交易签名就不需要了。
./eosd --skip-transaction-signatures

之后任何需要签名的操作,需要使用-s选项。
./eosc <COMMAND> <SUBCOMMAND> -s <PARAMS>




 
 

附加文档
eosc里面包含了所有命令的文档,简单的运行不带参数的命令,就可以得到eosc的全部命令列表。
$ ./eosc
ERROR: RequiredError: Subcommand required
Command Line Interface to Eos Daemon
Usage: ./eosc [OPTIONS] SUBCOMMAND

Options:
-h,--help Print this help message and exit
-H,--host TEXT=localhost the host where eosd is running
-p,--port UINT=8888 the port where eosd is running
--wallet-host TEXT=localhost
the host where eos-walletd is running
--wallet-port UINT=8888 the port where eos-walletd is running
-v,--verbose output verbose messages on error

Subcommands:
create Create various items, on and off the blockchain
get Retrieve various items and information from the blockchain
set Set or update blockchain state
transfer Transfer EOS from account to account
wallet Interact with local wallet
benchmark Configure and execute benchmarks
push Push arbitrary transactions to the blockchain
ubuntu@ubuntu:~/eos/build/programs/eosc$





为了得到任何特定的子命令的帮助,同样使用不带参数运行的方法。
$ ./eosc create
ERROR: RequiredError: Subcommand required
Create various items, on and off the blockchain
Usage: ./eosc create SUBCOMMAND

Subcommands:
key Create a new keypair and print the public and private keys
account Create a new account on the blockchain
producer Create a new producer on the blockchain
ubuntu@ubuntu:~/eos/build/programs/eosc$





 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

月23日bm接受EpiCenter采访视频

EOS其他相关郑浩 发表了文章 • 0 个评论 • 118 次浏览 • 2017-09-14 15:28 • 来自相关话题

视频链接
 
  查看全部
视频链接
 
 


关于Daniel Larimer 的一些区块链行业贡献

EOS其他相关郑浩 发表了文章 • 0 个评论 • 57 次浏览 • 2017-09-14 15:11 • 来自相关话题

翻译原文链接:https://steemit.com/eosio/%40x ... ustry 

2016年,bm和ned scott一起创办了steem,一个基于石墨烯的区块链社交平台。由ned担任ceo,而bm专注于他的长项:技术。在几个月内就开发并发布了功能完整的区块链。它开发了一个工作网站,并开始挖代币steem,代币的生成算法是一种新的只支持cpu的pow挖矿算法。

steem在bitcointalk.org上发了一篇帖子,宣告steem的诞生,同时大家都能开始挖steem。然而当时steem的概念还比较新,很少有人有兴趣去挖steem,于是steemit自己在第一周的时候挖了steem总量的80%;然而,随着新矿工的加入,这个比例开始下降。最开始挖到的steem,被用于支付给投票人,发帖的人,以及其它用户,由此推动了steem社区的发展。steem也解决了新用户的交易成本的问题,他们给每个新用户五美元的steem,这样新用户就能读文章,投票,写文章;这样,新用户就能与应用进行交互而不需要支付初始的费用。到目前为止,steem上的交易都不需要任何网络手续费。这要归功于比例限制交易(rate-limited transaction)的发明,这种方式通过限制带宽来防止spam攻击,而不是通过收手续费来防止spam攻击。

在6个月内,由于通胀,steemit持有的steem已经少于50%,而通胀产生的steem被支付给了矿工,区块生产者,投票者,以及发文的人,但是,steemit仍然拥有多数的steem,能支持开发工作。有些人认为steem是不可持续的,但是,bm说“steemit的资金很充足,它可以吧自己手上的steem卖掉,来筹集开发资金“。
bm一直都想开发一种能并行处理的通用的智能合约区块链,它能向应用和用户提供无手续费的服务,以及plasma那样的功能。为了追求这个愿景,bm和scott以及steemit友好分手,现在,bm已不是steemit的股东了。
为了消除那些认为bm抛弃了steem,与steeim不欢而散的谣言,在2017年4月13日,steem和bm发表了联合声明:

2017年3月14日,bm辞去Steemit, Inc的 CTO一职。Steemit, Inc与bm的合作一向愉快,没有任何争执。Steemit, Inc.与bm都会继续为区块链以及数字货币社区服务,创造价值。Steemit, Inc.感谢bm的付出,bm祝愿steemit的成员,社区成员在steem区块链,steeimt社交平台的发展中继续成功。

EOS
最近,关于EOS的文章已经很多了。有些是谈技术的,有些是谈block.one的,有些是谈投资/交易机会的。由于我是一名工程师,我主要的兴趣是技术,所以,我只会去谈谈EOS软件的细节,以及一些架构的细节。不过,要记住的是,目前EOS软件还没到能使用的状态。

Block.one
目前为止,block.one,运行EOS区块链—一种新的区块链操作系统,用于支持商业级去中心化应用 —  的软件的开发者。

成功的背后是什么?
一方面,是block.one团队看上去拥有一支经验丰富的管理团队,同时得到了区块链行业与金融行业的顶尖投资者和顾问的支持。另一方面,是它的著名成员:bm,CTO,区块链行业的老兵,bitshares和steem的创始人。

软件
EOS将是bm在4年内的第四个公共区块链平台,我个人认为bm毫无疑问会成功。想深入研究这个软件的人,可以在github上查看它的代码。
bm和block.one现在正在开发一种新的区块链软件,他们称之为EOS.IO。在2017共识大会的展示会上,block.one声称他们的软件功能非常厉害,这些功能包括:

1 通过并行处理从而水平拓展的能力
2 没有交易手续费
3 去中心化治理

有些人质疑这个软件是否真的能运转起来,但是bm其实已经创建过实现这项功能的区块链。
Ian Grigg,是一位受人尊敬的金融加密学者,Ricardian 合约的发明者,三重记账法的发明者,同时,他也是block.one的顾问,合伙人,他说:

目前,区块链上其实并没有什么真正有用的应用。bitshares是一款成功的区块链应用。steem是第一个成功的面向终端用户的分布式应用—它是在区块链之上的应用,但是你并不感觉到你是在区块链上。用户并不需要知道也不需要关心。steem打开了把社交媒体当作潜在的dapp的大门。steem的意义在于,你可以在区块链上开发任何社交网络,你可以开发facebook,你可以开发twitter。steem的意义在于我们现在在数字货币领域终于有了真正的应用,这是非常了不起的。

block.one承诺,EOS会是完全透明的。从7月1日开始EOS的代码就已经上传到github上了,任何人都能查看和审核。bm同时继续在steem和其它社交媒体上发布软件的开发进度。block.one还承诺,EOS将会在开发结束后,基于开源证书发布。
大众对EOS.IO技术白皮书的反馈和评论也可以在github上查看(网址: d)[/url] 

bm告诉我:

EOS.IO计划通过把每个合约(应用)在它自己的线程内使用私有数据运行,来达到拓展性能的目的。应用间通过异步通讯进行沟通。这是一种很著名的设计模式,它与以太坊的分片模式的设计理念有相似之处。EOS.IO只是把每个应用置于它自己的分片上。

这对我这个工程师来说,是一种稳妥的办法。
EOS使用WebAssembly语言,这能让开发者使用多种不同的语言来开发他们的应用,包括c,c++,以及rust。bm说,早期的测试表明,目前用c++写的,用WebAssembly运行的简单合约,性能能达到80000tps,而使用Solidity的话,性能只能达到5000tps左右。
以太坊企业联盟(EEA)最近也公布了一份愿景(网址: https://www.infoq.com/news/201 ... Vision)以太坊目前正在寻找pow的替代算法,来提高拓展性,减少计算成本。EEA正在评估多种方法,这些方法可能就是将来以太坊区块共识协议的基石,包括bm的dpos算法也在评估之列。
bm说EOS只是基于他以前开发过的技术和平台,这些技术和平台让他之前的区块链项目成功了。

去中心化
人们对bm的一个未证实的批评是,bm的项目不是去中心化的;虽然,bitshares和steem都是没有中央权威机构或服务器的。steem上的每笔交易都会在45秒内由21个单独的个体中的15个确认(在bitshares中则是2/3的个体),bm说其它平台则需要6个矿池中的4个在6小时内确认。bm认为比特币和以太坊的机制其实是dpow(Delegated Proof of Work),因为那部分生产区块的矿池其实是由矿工们选举出来的。比特币矿池现在的情况还不错,但是几年前,我们知道,一到两个大矿池垄断了比特币网络哈希算力的大头。DPOS对我来说仍然是天书一样。不过,它减少了随机性和变动性的负担,以前区块生产者都需要苦苦解决这两个问题。

在EOS中,区块生产者由代币持有人选举产生,但是,与其它平台不同的是,EOS的治理模式是,用户可以约束住区块生产者,检查他们是不是生产了空区块,或者有其他伤害社区的行为。这样一来,区块生产者的利益和用户的利益就能保持一致,而不像其他使用pow的平台那样,控制平台的人和拥有代币的人不是一群人。bm说,EOS的初衷是运行在全球的多个数据中心上,这样能极大地提高去中心化的机会。这样的话,或许会给那些想通过付费成为区块生产者的人设置了门槛,不过,最终可靠的数据中心的数量会比可靠的挖矿数据中心数量多得多。挖矿能不能盈利强烈依赖于电力比率,最终也会需要大型数据中心来拓展交易容量。

著名技术专家,Craig Sellars,Omni基金会和Tether的联合创始人,说过:

bm的区块链创新总是领先于他的时代。只有少数人能从头开始创建一个区块链,而bm就是这少数人中的一个。他一次又一次地推出了突破性的区块链平台和去中心化应用。bm和他的团队正在开发基于EOS.IO的平台,我对于在他们的新平台上开发的区块链的新应用很感兴趣。

但是,这需要一个过程。。。
但是有人会觉得,开发一个像EOS这样目标远大的区块链,你大概需要上百个高级开发人员,需要3个月进行架构设计,然后再花12个月进行开发和测试。不过,bm其实多年来都在做EOS的架构设计,并且已经开发了他所需要的所有类库和代码模式,这样对于发布一个最小可行性产品来说就容易得多。从他在steem上的最新文章来看,我们可以看到这个高性能网络的代码已经快要完成了,公共测试网络将在几周内发布。

感想
开发EOS的团队已经开发了一系列行业领先的区块链软件。
在最近的一份报导中,中本聪的基金管理者Dima Starodubcev说:

对我个人来说,我很高兴,区块链行业中最聪明的头脑之一,bm,在几次成功的实验之后,继续去开发一个成熟的智能合约平台。我们不该仅仅只是关注这个项目,而是应该尽我们所能帮助dapp开发者接受这个平台。尤其是,EOS是完全可行的,它使用的不是特定的虚拟机和编程语言,它使用的是更通用的WebAssembly,它很可能会为整个web打下基础。

我个人相信,bm最后找到了他能把他自己的全部激情倾注其中的挑战,并能创造另一项令人惊叹的突破性的技术。
对此,我诚挚地感想他。
---Fabian  Schuh
  查看全部

翻译原文链接:https://steemit.com/eosio/%40x ... ustry 

2016年,bm和ned scott一起创办了steem,一个基于石墨烯的区块链社交平台。由ned担任ceo,而bm专注于他的长项:技术。在几个月内就开发并发布了功能完整的区块链。它开发了一个工作网站,并开始挖代币steem,代币的生成算法是一种新的只支持cpu的pow挖矿算法。

steem在bitcointalk.org上发了一篇帖子,宣告steem的诞生,同时大家都能开始挖steem。然而当时steem的概念还比较新,很少有人有兴趣去挖steem,于是steemit自己在第一周的时候挖了steem总量的80%;然而,随着新矿工的加入,这个比例开始下降。最开始挖到的steem,被用于支付给投票人,发帖的人,以及其它用户,由此推动了steem社区的发展。steem也解决了新用户的交易成本的问题,他们给每个新用户五美元的steem,这样新用户就能读文章,投票,写文章;这样,新用户就能与应用进行交互而不需要支付初始的费用。到目前为止,steem上的交易都不需要任何网络手续费。这要归功于比例限制交易(rate-limited transaction)的发明,这种方式通过限制带宽来防止spam攻击,而不是通过收手续费来防止spam攻击。

在6个月内,由于通胀,steemit持有的steem已经少于50%,而通胀产生的steem被支付给了矿工,区块生产者,投票者,以及发文的人,但是,steemit仍然拥有多数的steem,能支持开发工作。有些人认为steem是不可持续的,但是,bm说“steemit的资金很充足,它可以吧自己手上的steem卖掉,来筹集开发资金“。
bm一直都想开发一种能并行处理的通用的智能合约区块链,它能向应用和用户提供无手续费的服务,以及plasma那样的功能。为了追求这个愿景,bm和scott以及steemit友好分手,现在,bm已不是steemit的股东了。
为了消除那些认为bm抛弃了steem,与steeim不欢而散的谣言,在2017年4月13日,steem和bm发表了联合声明:


2017年3月14日,bm辞去Steemit, Inc的 CTO一职。Steemit, Inc与bm的合作一向愉快,没有任何争执。Steemit, Inc.与bm都会继续为区块链以及数字货币社区服务,创造价值。Steemit, Inc.感谢bm的付出,bm祝愿steemit的成员,社区成员在steem区块链,steeimt社交平台的发展中继续成功。


EOS
最近,关于EOS的文章已经很多了。有些是谈技术的,有些是谈block.one的,有些是谈投资/交易机会的。由于我是一名工程师,我主要的兴趣是技术,所以,我只会去谈谈EOS软件的细节,以及一些架构的细节。不过,要记住的是,目前EOS软件还没到能使用的状态。

Block.one
目前为止,block.one,运行EOS区块链—一种新的区块链操作系统,用于支持商业级去中心化应用 —  的软件的开发者。

成功的背后是什么?
一方面,是block.one团队看上去拥有一支经验丰富的管理团队,同时得到了区块链行业与金融行业的顶尖投资者和顾问的支持。另一方面,是它的著名成员:bm,CTO,区块链行业的老兵,bitshares和steem的创始人。

软件
EOS将是bm在4年内的第四个公共区块链平台,我个人认为bm毫无疑问会成功。想深入研究这个软件的人,可以在github上查看它的代码。
bm和block.one现在正在开发一种新的区块链软件,他们称之为EOS.IO。在2017共识大会的展示会上,block.one声称他们的软件功能非常厉害,这些功能包括:


1 通过并行处理从而水平拓展的能力
2 没有交易手续费
3 去中心化治理


有些人质疑这个软件是否真的能运转起来,但是bm其实已经创建过实现这项功能的区块链。
Ian Grigg,是一位受人尊敬的金融加密学者,Ricardian 合约的发明者,三重记账法的发明者,同时,他也是block.one的顾问,合伙人,他说:


目前,区块链上其实并没有什么真正有用的应用。bitshares是一款成功的区块链应用。steem是第一个成功的面向终端用户的分布式应用—它是在区块链之上的应用,但是你并不感觉到你是在区块链上。用户并不需要知道也不需要关心。steem打开了把社交媒体当作潜在的dapp的大门。steem的意义在于,你可以在区块链上开发任何社交网络,你可以开发facebook,你可以开发twitter。steem的意义在于我们现在在数字货币领域终于有了真正的应用,这是非常了不起的。


block.one承诺,EOS会是完全透明的。从7月1日开始EOS的代码就已经上传到github上了,任何人都能查看和审核。bm同时继续在steem和其它社交媒体上发布软件的开发进度。block.one还承诺,EOS将会在开发结束后,基于开源证书发布。
大众对EOS.IO技术白皮书的反馈和评论也可以在github上查看(网址: d)[/url] 

bm告诉我:


EOS.IO计划通过把每个合约(应用)在它自己的线程内使用私有数据运行,来达到拓展性能的目的。应用间通过异步通讯进行沟通。这是一种很著名的设计模式,它与以太坊的分片模式的设计理念有相似之处。EOS.IO只是把每个应用置于它自己的分片上。


这对我这个工程师来说,是一种稳妥的办法。
EOS使用WebAssembly语言,这能让开发者使用多种不同的语言来开发他们的应用,包括c,c++,以及rust。bm说,早期的测试表明,目前用c++写的,用WebAssembly运行的简单合约,性能能达到80000tps,而使用Solidity的话,性能只能达到5000tps左右。
以太坊企业联盟(EEA)最近也公布了一份愿景(网址: https://www.infoq.com/news/201 ... Vision)以太坊目前正在寻找pow的替代算法,来提高拓展性,减少计算成本。EEA正在评估多种方法,这些方法可能就是将来以太坊区块共识协议的基石,包括bm的dpos算法也在评估之列。
bm说EOS只是基于他以前开发过的技术和平台,这些技术和平台让他之前的区块链项目成功了。

去中心化
人们对bm的一个未证实的批评是,bm的项目不是去中心化的;虽然,bitshares和steem都是没有中央权威机构或服务器的。steem上的每笔交易都会在45秒内由21个单独的个体中的15个确认(在bitshares中则是2/3的个体),bm说其它平台则需要6个矿池中的4个在6小时内确认。bm认为比特币和以太坊的机制其实是dpow(Delegated Proof of Work),因为那部分生产区块的矿池其实是由矿工们选举出来的。比特币矿池现在的情况还不错,但是几年前,我们知道,一到两个大矿池垄断了比特币网络哈希算力的大头。DPOS对我来说仍然是天书一样。不过,它减少了随机性和变动性的负担,以前区块生产者都需要苦苦解决这两个问题。

在EOS中,区块生产者由代币持有人选举产生,但是,与其它平台不同的是,EOS的治理模式是,用户可以约束住区块生产者,检查他们是不是生产了空区块,或者有其他伤害社区的行为。这样一来,区块生产者的利益和用户的利益就能保持一致,而不像其他使用pow的平台那样,控制平台的人和拥有代币的人不是一群人。bm说,EOS的初衷是运行在全球的多个数据中心上,这样能极大地提高去中心化的机会。这样的话,或许会给那些想通过付费成为区块生产者的人设置了门槛,不过,最终可靠的数据中心的数量会比可靠的挖矿数据中心数量多得多。挖矿能不能盈利强烈依赖于电力比率,最终也会需要大型数据中心来拓展交易容量。

著名技术专家,Craig Sellars,Omni基金会和Tether的联合创始人,说过:


bm的区块链创新总是领先于他的时代。只有少数人能从头开始创建一个区块链,而bm就是这少数人中的一个。他一次又一次地推出了突破性的区块链平台和去中心化应用。bm和他的团队正在开发基于EOS.IO的平台,我对于在他们的新平台上开发的区块链的新应用很感兴趣。


但是,这需要一个过程。。。
但是有人会觉得,开发一个像EOS这样目标远大的区块链,你大概需要上百个高级开发人员,需要3个月进行架构设计,然后再花12个月进行开发和测试。不过,bm其实多年来都在做EOS的架构设计,并且已经开发了他所需要的所有类库和代码模式,这样对于发布一个最小可行性产品来说就容易得多。从他在steem上的最新文章来看,我们可以看到这个高性能网络的代码已经快要完成了,公共测试网络将在几周内发布。

感想
开发EOS的团队已经开发了一系列行业领先的区块链软件。
在最近的一份报导中,中本聪的基金管理者Dima Starodubcev说:


对我个人来说,我很高兴,区块链行业中最聪明的头脑之一,bm,在几次成功的实验之后,继续去开发一个成熟的智能合约平台。我们不该仅仅只是关注这个项目,而是应该尽我们所能帮助dapp开发者接受这个平台。尤其是,EOS是完全可行的,它使用的不是特定的虚拟机和编程语言,它使用的是更通用的WebAssembly,它很可能会为整个web打下基础。


我个人相信,bm最后找到了他能把他自己的全部激情倾注其中的挑战,并能创造另一项令人惊叹的突破性的技术。
对此,我诚挚地感想他。
---Fabian  Schuh
 

EOS不会像以太坊那样遭受DoS攻击

EOS其他相关郑浩 发表了文章 • 0 个评论 • 108 次浏览 • 2017-09-13 19:04 • 来自相关话题

此文翻译自bm的文章:https://steemit.com/eos/%40dan ... ereum
今天早些时候我想在以太坊区块链上建立一个多重签名账号,却发现85美金的手续费都还不够。我十分震惊,手续费竟然这么高。调查之后发现原来是status ico的问题,这次ico的交易量前所未有。
看了看reddit论坛,用户emanslpater 认为不管网络有多好,面对这种ico都会遇到DoS攻击。

这种“资源竞争”的ico的问题在于网络多好都没用---这只会成为新的资源竞争。假设网络能处理两倍于此的交易量,那么人们就会在一半的时间内把交易提交进来。即使网络可以在一个区块上处理十亿交易量,那也只会刺激人们提交更多的交易,最终导致网络堵塞“----emanslpater
 
我曾看到一个相似的说法,那是在一个以太坊的telegram聊天组里,曾有人把社区的无经验归咎于创建了ico合约,这些ico合约设计得相当糟糕。
这是人们用错误的方式看待问题从而得出错误结论的又一个例子。必须承认,一开始我认为emanslpater的说法是有点说服力的;然而,经过一番深思,我认为这对于使用了比例限制算法的平台—比如eos和steem---来说,是错的。
没人能在他们被事先分配的比例上阻塞steem或eos网络,从而拒绝其他用户的交易。拥有1%代币的用户永远只能消耗可用带宽的1%,即使是在网络拥挤的情况下。在不拥挤的情况下,他们会被防止消耗超过50%可用能力。
所以,如果status ico是用eos网络进行的话会发生什么呢?那些每天只有少数几次交易的用户(绝大多数用户都属于此类)根本不会受影响。而那些想利用别人没使用的带宽的人将会被限制,但是也能像其他人一样进行交易。

在eos区块链上派发百万美元
假设,有一个人想分发一百万美元,分发给在一定时间内提出申请的头1000个人。我们还假设这个消息被广泛地传播了。
没人能提前广播(broadcast)因为交易会被拒绝,因此网络不会出现大量扩散。当申请的时间一到,每个人都能同时把他们的交易广播出去。每个节点都会接收并转播头1000个请求,然后拒绝之后的请求。对于挂起的请求每个节点会有些许不同,包括区块生产者。每个区块生产者会基于他接收到的头1000个请求生成区块,然后把这个区块广播出去。一旦把其它所有的节点的交易都广播出去了,那么就会接收到那1000个交易,然后丢弃掉剩余的挂起交易,这些挂起的交易现在被声明为无效的。
整个过程将在3秒内完成,而网络几乎感觉不到它。

结论
只要还保持这种交易费模式,那么以太坊面临的问题就无法解决。而人们还是想以低于市场价的方式参与这种ico,而且是基于先来先得的原则。这些ico可是要分发数百万美元的。

原文链接:https://steemit.com/eos/@peterchen145/eos-dos
  查看全部
此文翻译自bm的文章:https://steemit.com/eos/%40dan ... ereum
今天早些时候我想在以太坊区块链上建立一个多重签名账号,却发现85美金的手续费都还不够。我十分震惊,手续费竟然这么高。调查之后发现原来是status ico的问题,这次ico的交易量前所未有。
看了看reddit论坛,用户emanslpater 认为不管网络有多好,面对这种ico都会遇到DoS攻击。

这种“资源竞争”的ico的问题在于网络多好都没用---这只会成为新的资源竞争。假设网络能处理两倍于此的交易量,那么人们就会在一半的时间内把交易提交进来。即使网络可以在一个区块上处理十亿交易量,那也只会刺激人们提交更多的交易,最终导致网络堵塞“----emanslpater
 
我曾看到一个相似的说法,那是在一个以太坊的telegram聊天组里,曾有人把社区的无经验归咎于创建了ico合约,这些ico合约设计得相当糟糕。
这是人们用错误的方式看待问题从而得出错误结论的又一个例子。必须承认,一开始我认为emanslpater的说法是有点说服力的;然而,经过一番深思,我认为这对于使用了比例限制算法的平台—比如eos和steem---来说,是错的。
没人能在他们被事先分配的比例上阻塞steem或eos网络,从而拒绝其他用户的交易。拥有1%代币的用户永远只能消耗可用带宽的1%,即使是在网络拥挤的情况下。在不拥挤的情况下,他们会被防止消耗超过50%可用能力。
所以,如果status ico是用eos网络进行的话会发生什么呢?那些每天只有少数几次交易的用户(绝大多数用户都属于此类)根本不会受影响。而那些想利用别人没使用的带宽的人将会被限制,但是也能像其他人一样进行交易。

在eos区块链上派发百万美元
假设,有一个人想分发一百万美元,分发给在一定时间内提出申请的头1000个人。我们还假设这个消息被广泛地传播了。
没人能提前广播(broadcast)因为交易会被拒绝,因此网络不会出现大量扩散。当申请的时间一到,每个人都能同时把他们的交易广播出去。每个节点都会接收并转播头1000个请求,然后拒绝之后的请求。对于挂起的请求每个节点会有些许不同,包括区块生产者。每个区块生产者会基于他接收到的头1000个请求生成区块,然后把这个区块广播出去。一旦把其它所有的节点的交易都广播出去了,那么就会接收到那1000个交易,然后丢弃掉剩余的挂起交易,这些挂起的交易现在被声明为无效的。
整个过程将在3秒内完成,而网络几乎感觉不到它。

结论
只要还保持这种交易费模式,那么以太坊面临的问题就无法解决。而人们还是想以低于市场价的方式参与这种ico,而且是基于先来先得的原则。这些ico可是要分发数百万美元的。

原文链接:https://steemit.com/eos/@peterchen145/eos-dos