精华内容
参与话题
问答
  • EOS从入门到精通(三)

    万次阅读 2018-02-28 09:24:46
    大家好,非常感谢参加《EOS从入门到精通》系列课程,我是王巨,今天是EOS技术白皮书解读的第三讲。今天我们来解读EOS白皮书中的“应用程序的确定性并行”和“Token模型与资源使用”:下面是这两章节的思维导图:应用...

    大家好,非常感谢参加《EOS从入门到精通》系列课程,我是王巨,今天是EOS技术白皮书解读的第三讲。今天我们来解读EOS白皮书中的“应用程序的确定性并行”和“Token模型与资源使用”:下面是这两章节的思维导图:

    应用程序的确定性并行执行.png
    Token模型与资源使用.png

    我们先来讲解一下应用程序的确定性并行,这部分在入门篇我们不做重点解读,因为这里面涉及到了很多编程方面的知识,我在这里只跟大家做一下同步,让大家对EOS的高性能有一些感性的认识。

    EOS白皮书解读(三).002.jpeg

    好,我们开始应用程序确定性并行这个章节的解读:该部分从简介、最小化的通讯延迟、只读消息处理、多账户的原子交易、区块链状态的部分评估、自主最优调度这几个方面跟大家讲解EOS并行执行的原理。

    EOS白皮书解读(三).003.jpeg

    我们知道区块链最简单的理解是一个公共的账本,而维护账本共识的核心基础就是行为的确定性,这意味着如果需要并行计算,那么所有的并行计算都不能互斥或加锁,因为锁的状态是不确定的。不加锁,就需要一些方法来保证所有账户只能读写自己的私有数据库。这样每个账户都必须顺序的处理消息,因此EOS的并行级别是账户级别的。

    EOS将消息传递 组织成独立的线程,这样可以比较容易的评估线程并行的可能性,因为每个账户的状态只取决于传递给他们的消息。进度表,我这里理解成消息的执行顺序,这个顺序在区块产生后是确定的,而在产生过程中是不确定的,是由区块生产者按照并行算法决定。比如说区块生产者A生产区块,那么消息执行顺序就由A来决定,A产生区块后,生产者B验证区块时要完全按照A的执行顺序来验证。

    当脚本产生一个消息后不会被立即传送,而是会被安排到下一个循环,因为接收方当前可能在另一个线程内主动修改自己的状态。

    EOS白皮书解读(三).004.jpeg

    最小通讯延迟,这里的延迟,是指一个账户向另一个账号发送消息并接收响应所需要的时间,EOS的设计目标是能够在一个区块内来回交换消息,那么EOS是如何做到的呢?EOS将区块分成了几个循环,循环又分成了多个线程,每个线程包含一个交易列表,每个交易包含一组要传递的消息。这个结构可以看成为一棵树,在这个树中交替的层被顺序的并行的处理,我们看下面这张图

    可以看到,循环是顺序执行的,线程是可以并行的,交易和消息是要顺执行的,而接受者和被通知的账户是可以并行的。为什么接受者这个地方是可以并行呢?这要看一下下面的只读消息处理

    EOS白皮书解读(三).005.jpeg

    只读消息的处理,EOS对于无需更新状态的消息处理是可以并行的,只要特定的只读消息处理程序被包含在特定的循环内的一个或多个线程中就可以。

    EOS白皮书解读(三).006.jpeg

    我们再来看一下多账户的原子交易。有些时候需要确保消息以原子的方式传递给多个账户并需要被其接受。在这种情况下双边的消息会被放在同一个交易中,两边的账户也会被分配在相同的线程,并且消息会被顺序的处理。这样做的目的是为了确保交易成功,而这其实会带来性能上的损耗,而且在成本上也会很高,因此出于性能和成本的考虑,应用程序最好能尽力减少涉及两个或更多使用率高的账户的原子操作。

    EOS白皮书解读(三).007.jpeg

    区块链状态的部分评估,我简单说一下我的理解,不同于以太坊所有的全节点都必须运行所有的合约,EOS具备这种允许完整节点选择要运行的任何程序子集的能力,这样带来一个好处就是如果我仅仅运行一个小应用,那么我可以使用有限资源启动完整节点,比如一个交易所的开发人员运行完整节点,以便向用户展示交易状态,这个程序是不需要与社交媒体的程序有状态关联的。

    EOS白皮书解读(三).008.jpeg

    自主最优调度,我的理解是EOS设计了这样一个调度框架,每个区块生产者都可以根据自己的算法来进行区块的生产。EOS不强制区块生产者将任何消息发送给任何其他账户,每个区块生产者都可以根据处理交易所需的计算复杂性和时间做出自己的主观预测。

    在网络层面上,所有的交易都会收取一个固定的计算带宽成本,区块生产者也可以使用自己的算法来测量资源的使用。这里的计算带宽,我的理解应该是广义的,可能包含计算资源,状态存储资源以及网络带宽。

    一般情况下只要一个区块生产者认为交易在资源使用的限度内是有效的,那么所有的其他区块生产者也会接受,但是交易可能需要最长1分钟才能找到生产者,为什么是一分钟,因为一分钟内交易可以在21个区块生产者之间流转一遍,如果还没有找到,那么这个交易就不会被打包了。

    EOS白皮书解读(三).009.jpeg

    好了,关于程序确定性和并行执行就讲到这里,我们来看一下TOKEN模型和资源使用。主要从简介、客观与主管的衡量、付费策略、委托能力、分离交易成本与Token的价值、状态存储成本、区块奖励和社区利益应用这几个方面解读。

    EOS白皮书解读(三).010.jpeg

    所有的区块链资源都是有限的,需要系统的防止被滥用,比特币和以太坊是用手续费和Gas来防止资源被无限使用的,那么EOS是怎么防止资源被滥用的呢?

    我们先看一下EOS提供的资源有哪些,主要有存储和带宽资源、计算和计算Backlog以及状态存储。先解释一下计算Backlog是什么,可以翻译成计算积压,我的理解是这样的,比如说一个完整节点断网一段时间,等重新联网后需要重新同步未同步的区块,然后对这些新的区块进行重新验算,我理解这些计算任务就叫计算Backlog。

    区块生产者发布他们的带宽、计算资源和状态存储资源、每个用户对资源的使用率跟Token持有的比例成正比。持有1%的Token的账户可以使用1%的状态存储资源。

    带宽和计算资源由于是瞬时资源没法保存,因此采用的策略是在保留的基础上进行分配,算法类似于Steamit限制带宽的算法,有点像QoS算法。举例来说:假如你持有1%的Token,那么在瞬时资源的使用上,你最少可以使用到1%,如果系统比较空闲,那么你可以使用的更多,如果系统非常繁忙,那么系统至少可以保证有1%的资源是专门给你提供的。

    EOS白皮书解读(三).011.jpeg

    所有的资源使用约束最终都是主观的,由区块生产者根据各自的算法和估计来执行,EOS允许使用客观的根据消息或存储容量来衡量消耗,也可以自己定义主观的衡量算法。我的理解是,EOS给了一个推荐的简单算法,至于区块生产者要不要使用,由他们自己决定。这在EOS上都是允许的。

    EOS白皮书解读(三).012.jpeg

    付费策略,这个我们也早就提过了,应用不能强制用户为使用区块链资源而付费,同样的EOS也不会强制应用的收费策略。

    EOS白皮书解读(三).013.jpeg

    委托能力,我们知道,持有EOS的人不一定是应用开发者,可能不会立即使用链上资源,那么这些人就可以向其他用户提供或出租这些带宽,EOS允许这样做,同时区块生产者能够识别这样的授权,并相应的分配带宽。通过这个设计,将来EOS的持有者通过出租EOS可能就能带来持续的盈利。这就是为什么有人将EOS比作地皮的原因。

    EOS白皮书解读(三).014.jpeg

    分离交易成本与Token的价值,这点非常重要,它的优点就是应用程序的可用带宽仅取决于Token的持有量跟Token的价格没有关系,只要持有一定数量的Token,就可以在固定的状态和带宽使用的情况下永久的用下去。开发者和用户不受Token市值波动的影响。这点是比特币和以太坊做不到的。

    EOS区块链使区块生产者能够自然地增加每个Token可用的带宽,计算和存储,而不管Token的价值如何。EOS区块链每次产生区块时都会授予区块生产者Token。Token的价值将影响生产者能够购买的带宽,存储和计算量;这个模型自然会利用上升的Token价值来提高网络性能。

    EOS白皮书解读(三).015.jpeg

    虽然可以委托带宽和计算资源,但应用程序状态的存储将要求开发人员持有Token,直到该状态被删除。如果状态从未被删除,则Token被有效地从流通中移除。每个账户都需要一定的存储空间,因此每个账户都必须保持最低的余额,随着网络存储容量的增加,这个最低要求的平衡将会下降。

    EOS白皮书解读(三).016.jpeg

    块奖励,由所有区块生产上公布的期望收益的中位数决定,EOS可能会配置区块生产者的奖励执行上限,使得Token的供应的年度增长在5%以内。

    关于社区利益应用这个章节,说实话我没太看明白,英文和翻译过来的中文都没太理解,这里就不给大家讲了,以免传递错误的信息,好在这个部分看起来不是非常重要。如果有了解的同学可以发消息说一下。

    好了,今天的主要内容就讲到这里,总结一下,我们今天讲了两部分内容,并行执行和Token模型与资源使用。重点在Token模型与资源使用的理解上。理解了这个才能明白EOS Token本身的价值所在。我在前段时间写过专门写过一小篇文章介绍EOS的经济系统,可以给大家分享一下。地址是:

    EOS经济体统分析




    作者:王巨
    链接:https://www.jianshu.com/p/9729c5487dee
    來源:简书
    著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
    展开全文
  • EOS 详解

    2018-09-05 22:48:16
    EOS.IO 软件采用区块链架构,实现去中心化应用的横向和纵向扩展。具体方法为构建一个类操作系统的架构,在其中搭建应用程序;另外,提供跨 CPU 跨集群的账户系统、身份验证、数据库、异步通信,并且支持应用程序间的...

     

    一、概述

    EOS.IO 软件采用区块链架构,实现去中心化应用的横向和纵向扩展。具体方法为构建一个类操作系统的架构,在其中搭建应用程序;另外,提供跨 CPU 跨集群的账户系统、身份验证、数据库、异步通信,并且支持应用程序间的调度,在受管控的区块链环境中,可每秒处理百万级交易,消除用户手续费,并且可以部署和维护DAPP

    二、实现机制共识算法(BFT-DPOS

    EOS.IO 采用授权委托证明(DPOS)的算法: EOS 区块链上所有代币持有者可以都通过一个持续的投票系统选择区块生产者。想参与区块生产,只要能说服代币持有人给自己投票,最终(得票最高的那些节点)被选为区块生产者。 
    EOS.IO
    0.5 秒产生一个区块,并且在任一时间仅有一个生产者获权生产区块。如果在预定时间内没有区块生成,则跳过该块。相应的,当跳过一个或多个块时,区块链中会存在一个大于等于 0.5 秒的时间间隔。每一轮产生 126 个区块(共 21 个区块生产者,每个生产者生产6个块)。在每轮开始时,根据代币持有者的投票选出 21 个不同的区块生产者。获选的生产者的生产顺序由 15 个或更多生产者一致同意决定。如果一个生产者错过了一个块,并且在过去 24 小时均未产生任何块,则会被从生产者的名单中剔除,直至他通知区块链表明他打算再次开始生产区块。这种方式可以排除不可靠的生产者来最小化错过的区块数量,从而确保网络的顺畅运行。 
    分叉的处理:因为其区块生产过程中,生产者是合作而不是竞争关系,理论上不会分叉。如果有分叉,将自动切换到最长的链上。原因是拥有较多生产者的区块链分叉会比生产者少的链增长速度要快得多,生产者占比越高的分叉链丢失的区块会更少。 
    添加了拜占庭容错机制的 DPOS 算法需要所有生产者签名所有区块,但禁止同一个生产者签名两个时间戳或高度相同的区块。一个区块一旦被 15 个生产者签名,那么这个区块就可以被视为不可逆了。 任何生产者一旦签名两个相同时间戳或相同区块高度的区块,这种不诚信行为就会留下密码学证据。在这一模型下,不可逆的共识将在 1 秒内达成。

    2.1 交易确认

    DPOS基础上,EOS.IO中加入了异步拜占庭容错(aBFT), 可实现更快的不可逆性。 aBFT算法在1秒时间内达到不可逆性的100%确认。

    2.2 交易作为权益证明(TaPoS

    EOS.IO要求每一笔交易必须包括最近的区块头的哈希值。目的是为了:防止分叉区块链上出现大量重复事务,同时通知整个网络,某个特定用户和其权益存在于某个特定的分叉上。 
    如此一来,伪造假冒链将变得非常困难,因为伪造者无法将合法链中的交易迁移到假冒链上。

    三、账户系统

    EOS.IO账户名称由帐户的创建者指定。帐户创建者必须使用 EOS 代币预留 RAM 用来存储新帐户,直至新帐户质押自己的代币来预留自己的 RAM。在去中心化的背景下,应用程序开发人员在新用户注册时,会象征性地支付账户创建费用。创建新的区块链账户所需的资金对于企业来说很低,而且如果用户在注册另一个应用程序时已经创建了帐户,那就没有必要再次创建了。

    3.1 操作和处理

    每个帐户可以将结构化的操作发送到其他帐户,并且可以定义脚本来处理收到的操作。EOS.IO为每个帐户提供自己的专用数据库,只能由自己的操作处理程序访问。操作处理脚本还可以将操作发送到其他账户。EOS.IO智能合是操作和自动操作处理程序的组合。 
    并发执行操作:每个账户同样可以在数据库内定义任意数量的范围。区块生成者以对内存访问范围没有冲突的方式调度事务。

    3.2 权限管理

    权限管理包括确认某项操作是否被正确授权。最简单的权限管理是检查交易是否具有所需的签名,这也意味着所需的签名是已知的。一般而言,授权涉及个人或群体,并且往往是分类的。EOS.IO 通过一个声明式权限管理系统,对帐户进行细粒度、高级别的控制,以确定谁在何时可以做什么。 
    每个帐户都可以通过其他帐户和私钥的组合来控制,创建一个分层的权限结构。 
    帐户可以定义什么样的账户和密钥的组合,把特定的操作发送到另一个账户。例如,可以使用一个密钥访问用户的社交媒体帐户,另一个密钥用于访问交易所。甚至可以授权其他帐户来代表本账户进行操作,而无需为此账户分配密钥。

    3.2.1 权限级别

    帐户可以定义命名的权限级别,每个权限级别可以从更高级别的命名权限中派生。每个命名权限级别定义一个权限。权限是一个多签名的阈值检查,由其他帐户的密钥和/或命名权限级别组成。例如,可以为一个帐户的某个操作设置朋友权限级别,该帐户的朋友对该操作具有相同等级的控制权限。 
    另一个例子是Steem区域链,它具有三个硬编码命名的权限级别:owner activepostingPosting权限只能执行诸如投票和发布等社交行为,而active权限可以执行除更改所有者的所有操作。Owner权限被保留,可以执行一切操作。EOS.IO允许每个账户所有者定义自己的权限级别以及消息的分组。

    3.2.2 权限映射

    EOS.IO 允许每个帐户定义从合约/操作或其他账户的合约,到其自己的命名的权限级别之间的映射。例如,账户持有人可将其社交媒体应用程序映射到账户所有者的朋友权限组。通过此映射,该账户的任何朋友都可以作为账户所有者在社交媒体发布信息。尽管这些朋友可以作为帐户所有者发布信息,但他们仍然会使用自己的密钥来签名。这就意味着,哪些朋友以何种方式使用了该帐户,始终是可以确定的。

    3.2.3 权限评估

    当从账户 @alice 发送操作到 @bob 时,EOS.IO 将首先检查 @alice 是否为 @bob.groupa.subgroup.Action 定义了权限映射。如果没有发现任何结果,那么将会检查 @bob.groupa.subgroup,然后检查 @bob.groupa,最后检查 @bob。如果没有找到进一步的匹配,则假定映射的命名权限组是 @alice.active。一旦确定了映射的命名权限,则使用多签名阈值来验证签名,并获取命名权限相关联的权限。如果失败,那么它会遍历父类权限,最后遍历 owner 的权限,即@alice.owner

    3.2.4 默认权限组

    EOS.IO 给所有账户指定了两个默认权限组。一个是”owner”权限组,可以执行任何操作。还有一个“active”权限组,除了更改“owner” 权限组之外,可以执行所有操作。所有其他权限组均由“active”组派生。

    3.2.5 并发评估权限

    权限验证成为一个只读与可并发化的过程:当重播区块链以从动作日志重新生成确定性状态时,不需要再次评估权限。因为事务包含在已知的状态良好的区块中,可以让其跳过这一步骤。这极大减少了重放区块链时消耗的计算量。

    3.3 强制延迟的操作

    消息包含在区块后,EOS.IO支持应用程序开发人员可以指定某些消息在应用前必须等待一小段时间,在此期间可以取消该操作。 
    当这类消息被广播时,用户可以通过电子邮件或短信收到相应通知。如果用户没有授权,那么他们可以登录帐户来还原账户数据并撤回消息。

    3.4 被盗钥匙恢复

    EOS.IO提供了密钥被盗时恢复其帐户控制的方法。帐户所有者可以使用过去30天内活跃的任何其批准的帐户恢复合作伙伴的密钥,重置帐户上的所有者密钥。没有账户所有者的配合,帐户恢复合作伙伴无法重置帐户的控制权。 
    这个过程也与简单的多重签名交易有着极大的不同。通过多签名交易,另一个实体会成为每个执行交易的一方。相比之下,通过恢复过程,恢复合作伙伴仅参与恢复过程,无权参与日常交易。这极大降低了所有参与者的成本和法律责任。

    四、应用程序的确定性并行执行

    区块链共识取决于确定性 (可重复) 行为,这意味着所有并行执行必须避免使用互斥锁或者其他锁原语。如果没有锁,那么必须要有方法来保证可能被并行执行的交易不会产生非确定性结果。EOS.IO目前发行版将是单线程的,但是它会包含将来多线程、并行执行所需的数据结构。

    4.1 自主最优调度

    EOS.IO 不能强迫区块生产者投递任何操作给其他帐户。每个区块生产者都需要对处理交易所需的计算复杂度和时间做出主观测量。无论是用户生成的还是智能合约自动生成的交易,这一点都适用。 
    在一个基于 EOS.IO 的区块链里,在网络层面上,所有交易会根据执行的 WASM 指令数来计算带宽成本。但是使用 EOS.IO 软件的每个区块生产者都可能会使用自己的算法和标准来计算资源的使用情况。当区块生产者判定某个交易或账户会消耗过多的计算能力时,在生产自己的区块时他们会直接拒绝这个交易;但是如果其他区块生产者都认为这个交易有效,他们还是会处理该交易。 
    一般而言,只要有 1 个区块生产者认为某个交易有效且在资源使用限制内,那么其他所有区块生产者也会接受这个交易;但是这个交易可能需要多达 1 分钟才能找到生产者。 
    在某些情况下,生产者创建的区块可能包含可接受范围之外的数量级的交易。遇到这种情况,下一个区块生产者可以选择拒绝该区块,这个僵局将会被第三个生产者打破。这和过大区块导致网络传播延迟相似。EOS.IO 社区会注意到这种滥用模式,并最终移除恶意生产者的投票。这种对计算成本的主观评估使得区块链不必精确和确定地测量交易需要运行多长时间,没必要精确地计算指令数,这可以在不违反共识的情况下显著增加优化性能的机会。

    4.2 延期交易

    EOS.IO支持计划在未来执行的延期交易。

    4.3 上下文无关操作

    上下文无关操作仅涉及需要用到交易数据的计算,而不涉及区块链状态。例如,签名验证是一种仅需交易数据和签名以确定签署事务的公钥的计算。签名验证在区块链必须执行的计算中,属于最昂贵的单个计算之一,但由于此计算是上下文无关的,因此可并发执行。 
    上下文无关操作与其他用户操作类似,只是它们无法访问区块链状态来执行验证。这不仅使EOS.IO能够并发处理诸如签名验证等所有上下文无关操作,更重要的是可以实现通用签名验证。 
    通过支持上下文自由操作,可伸缩性技术变得更加可并发和实用,实现了高效的区块链间通信和潜在的无限可扩展性。

    五、令牌模型和资源使用

    所有的区块链都是资源受限的,并且需要一个系统来防止滥用。在EOS.IO系统中,有三大类资源被应用程序消耗: 
    1)带宽和日志存储(磁盘)(2)计算和计算积压(CPU)(3)状态存储器(RAM 
    瞬时使用和长期使用都会消耗带宽和计算。区块链系统将维护所有消息的日志,这些日志会被所有的完整节点下载和存储。通过日志信息,可以重构所有应用程序的状态。 
    计算债务是必须执行的计算,以便从操作日志中重新生成状态。如果可计债务增长量过大,那么就有必要对区块链的当前状态进行快照,并放弃区块链的历史状态。如果计算债务增长过快,区块链可能需要6个月的时间来重放1年的交易。因此,谨慎管理计算债务至关重要。 
    区块链存储状态是可从应用程序逻辑访问的信息。它包括诸如订单和账户余额等信息。如果应用程序从未读取该状态,则不应该存储它。例如,应用程序逻辑不会读取博客文章内容和评论,因此不应将其存储在区块链状态中。同时,发布/评论,投票数量以及其他属性的存在将作为区块链状态的一部分进行存储。 
    区块生成者可以发布他们可用的带宽、计算资源和状态的容量。EOS.IO软件允许每个帐户消耗一定百分比的可用容量,该容量与3天赌注合同中持有的令牌数量成比例。 例如,如果启动了基于EOS.IO软件的区块链,并且如果一个帐户持有根据该区块链可分配的总令牌的1%,则该帐户有可能利用1%的状态存储容量。 
    在已启动的区块链中使用EOS.IO,带宽和计算能力将被分配到部分储备基础中,因为未使用的容量不能存储下来为将来使用。EOS.IO系统将使用类似于Steem的算法来限制带宽使用速率。

    5.1 客观和主观测量

    测量计算使用对性能和优化有重大影响,因此,所有资源使用限制最终是主观的,并且由区块生产者根据他们各自的算法和估算来执行,通常由区块生产者通过写自定义插件来执行。 
    虽说如此,但有些东西客观地衡量是微不足道的。交付的操作次数以及存储在内部数据库中的数据大小对于客观衡量都很便宜。EOS.IO使区块生产者能够在这些客观测量上应用相同的算法,但可以选择对主观度量应用更严格的主观算法。

    5.2 收款人支付

    没有网站强制其访问者在访问其网站时收取小额费用来支付管理成本。因此,去中心化的应用程序不应强迫使用区块链的用户直接支付区块链使用费用。使用EOS.IO软件的推出区块链不要求其用户直接支付区块链使用费,因此不会限制或阻止企业制定其产品的货币化策略。 
    尽管接收方可以支付,但EOS.IO使发送方能够支付带宽、计算和存储费用。这使得应用程序开发人员能够选择最适合其应用程序的方法。很多情况下,发件人支付大大降低了不想实施自己的配给系统的应用程序开发人员的复杂性。应用程序开发人员可以将带宽和计算委派给用户,然后让发件人支付模型执行使用。从最终用户的角度来看,它是免费的,但从区块链的角度来看,它是发件人支付的。

    5.3 委派能力

    采用EOS.IO区块链上的令牌持有人,可能不需要立即消耗全部或部分可用带宽,可将这些未消耗的带宽委派或租借给其他人; 运行EOS.IO的区块生产者将会识别这种容量授权并分配相应带宽。

    5.4 将交易成本与令牌价值分开

    EOS.IO的主要优点之一是可用于应用程序的带宽量完全独立于令牌价格。如果应用程序所有者在使用EOS.IO程序的区块链上持有相应数量的令牌,则该应用程序可在固定状态和带宽的情况下无限期运行。,采用EOS.IO软件的区块链生产商能够自然地增加带宽,计算和存储,而不受令牌价值的影响。 
    使用EOS.IO的区块链每次新产生区块时都会授予区块生产者令牌。令牌的价值将影响生产商的带宽、存储和计算量,该模型利用自然上升的令牌价值来提高网络性能。

    5.5 状态存储成本

    虽然可以委托带宽和计算,但应用程序存储状态需要应用程序开发人员持有令牌,直至该状态被删除。如果该状态从未被删除,那么令牌将从循环中有效移除。

    5.6 块奖励

    创建的令牌数量由所有块生产者公布的期望收益的平均数决定。 EOS.IO可能被设为强制执行生产者奖励的上限,使得令牌供应总量的年增长率不得超过5%。

    5.7 获利方法

    除了选择区块生产者之外,根据基于EOS.IO的区块链,令牌持有者可以选择一些旨在让社区受益的建议。获胜的提案将获得高令牌通货膨胀配置百分比的令牌减去已经支付给区块生产者的令牌。这些建议将获得与每个应用程序从令牌持有者收到的投票成比例的令牌,直到他们要求执行其工作的金额为止。当选的提案可以由代币持有人的新当选提案取代。 
    实施人工建议的系统合同可能在20186月初次启动时未到位,但资金机制将会实现。它将开始积累资金,同时开始区块生产者奖励。由于工作人员建议系统将在WASM中实施,因此可以在以后不加分叉的情况下添加。

    六、脚本和虚拟机

    EOS.IO 软件将会是账户间传递可信消息(称之为操作)的最重要的平台。脚本语言和虚拟机属于具体实现,与 EOS.IO 的技术设计几乎是相互独立的。任何确定性的语言或者虚拟机,只要性能足够好,并支持沙盒运行机制,都可以和 EOS.IO API 整合起来。

    6.1 范式定义的操作(Actions

    任何账户间的操作都满足一定的范式,该范式也是区块链共识状态的组成部分。这一范式支持二进制格式和 JSON 格式间的无缝转换。

    6.2 范式定义的数据库

    数据库状态也由类似的范式定义。这一范式使得所有应用储存的数据都遵循特定的格式,既能转换为可读性很强的 JSON 格式,又能以高效的二进制格式存储与操作。。

    6.3 通用多索引数据库 API

    开发智能合约需要一个事先定义好的数据库来追踪、存储和查询数据。开发者们普遍需要支持数据排序或多字段索引的数据库,来保证数据的一致性。

    6.4 将认证从从应用中抽离

    为了最大化并行运算能力和最小化算力债(计算应用状态需要在交易日志中从头运算),EOS.IO 将验证逻辑分成了三部分: 
    验证一个操作在内部是一致的;验证所有的前置条件是有效的;修改应用状态。 
    验证操作的内部一致性是只读操作,且不需要区块链状态信息。这意味着这一操作可以最大程度地并行进行。验证前置条件的有效性(比如必要的余额)也是只读操作,因此也可以利用并行机制。只有修改应用状态这一步需要写操作,并且对每个应用必须严格按照顺序执行。 
    认证是用来验证操作是否可以被执行的一个只读过程。而(操作涉及的)真正的业务则是应用程序来完成的。当一个操作发生的时候,这两部分工作都需要实时计算。一旦(包含该操作的)交易被打包进了区块链,认证操作也就不再需要重复进行了。

    七、区块链间通信

    EOS.IO 的设计能促进跨链通信,实现方式是简化生成操作存在证明和顺序证明。这些证明和围绕操作传递设计的应用架构一起,使得跨链通信的细节和验证工作对应用开发者不可见,开发者看到的只是更高层次的抽象。

    7.1 用于轻客户端验证的默克尔证明

    如果客户端不需要处理全部交易的话,和其他区块链的结合将变得非常容易。毕竟类似交易所这样的客户端,它只关心资产的转入和转出。理想情况下,交易所的链可以用转账交易的轻量默克尔证明(来完成交易所业务),而不是完全信任某个区块生产者。每条链的区块生产者都希望和其他链同步的开销尽可能地小。轻量客户端验证(LCV)的目标是生成相对轻量的存在证明,这些证明可以被任何关心一个轻量的数据集的客户端用来验证。在上述例子中,LCV 的目的就是为了用来证明某笔交易已经被包含进某一特定区块,而这一区块已经被某条特定的链所收录。 
    任何有不可逆区块头数据的用户在交易被区块记录后,都可以使用 EOS.IO 提供的轻量证明。轻量证明的哈希连接(hash-linked)结构表明,最多只要 1024 个字节,即可验证任何一笔交易的存在与否。 
    考虑到区块链中的区块的 id 和区块头都是可信的且不可逆的,因此证明某个区块被包含在某个区块链中也是可行的。这类证明最多只需 ceil(log2(N)) 次摘要计算即可完成,其中 N 为区块链中的区块个数。就 SHA256 这种摘要算法来说,你只需要 864 个字节就可以在一个有着 1 亿个区块的链上验证某个区块的存在。使用合适的哈希连接(hash-linking)机制生产区块以启用上述证明,几乎不会带来什么额外开销,所以这种方式十分可行。 
    若要在其他链上验证证明,时间、空间和带宽上都有很多优化空间。追踪全部的区块头(每年 420MB 递增)可以将证明维持在比较小的空间占用。仅追踪最近的区块头会在最小长期存储和证明大小之间实现平衡。另外也可以采用惰性求值的方式,记录过去的证明的中间哈希值。新证明只需要包含已知的稀疏树的连接。具体选取何种方式,取决于默克尔证明引用的带有交易的外部区块的比例。 
    当互联和耦合程度达到一定的复杂度之后,将两条链的数据合并将更简单高效,如此一来也就不再需要默克尔证明了。因为性能的原因,跨链证明的频度当然是越小越好。

    7.2 跨链通信的延迟

    当和外部区块链进行通信的时候,区块生产者必须要 100% 确认一笔交易已经被不可逆转地写入到外部区块链之后,才可以将其当作合法输入。EOS.IO 的区块链加上 DPOS 算法 0.5 秒的出块速度,结合拜占庭容错机制,使得等待上述确认的时间大约为 0.5 秒。任何区块生产者若违背上述原则,不等待确认即开始下一步操作,例如交易所在未确认的情况下就将资产冲入用户账户,随后又将资产取消的行为,都将影响区块链的共识机制。EOS.IO 软件使用 DPOS 算法结合拜占庭容错机制快速实现交易的不可逆性。

    7.3 完整性证明

    当外部的区块链使用默克尔证明的时候,去知晓处理的全部交易全部有效,不同于去知晓没有交易被跳过或省略。因为想要证明最近全部的交易都已经被知晓是不可行的,而证明交易历史记录里没有被跳过的交易则很容易。EOS.IO 通过给发送到每个账户的每个操作一个顺序编号来实现这一点。用户可以使用这些顺序编号来验证某个特定账户的所有操作都已经被处理,并且是严格按照顺序来处理的。

    7.4 隔离见证(SegWit

    隔离见证(SegWit)是指一笔交易被打包进不可变更的区块链之后,这笔交易的签名就与交易无关了。一旦交易变为不可变更状态,签名数据就可以被舍弃,其他人仍然能获得区块链当前状态。考虑到签名数据容量占据了多数交易的很大部分,隔离见证将能大幅缩减磁盘占用和数据同步时间。 
    隔离见证的概念对用于跨链通信的默克尔证明同样适用。一旦一个证明被接受并被不可逆地记录进区块链,那么这个证明用到的 2KB 大小的 sha256 哈希值就可以在不影响区块链状态的前提下被舍弃。值得一提的是,将隔离见证用于跨链通信节省的存储空间的是常规签名场景下的 32 倍。 
    隔离见证应用的另一个场景则是用于(存储) Steem 的博客文章。利用隔离见证,存储在区块链上的将只是一篇篇博客内容的 sha256 哈希值,真正的内容则存储于隔离见证数据中。区块生产者只需要依靠内容的哈希值就可以验证文章的存在。要从交易日志中恢复区块链当前状态,生产者无需存储全部的内容。这样一来,以下的证明方式变得可行:内容只要曾经有人看过即可,无需永久储存。

    八、主要指令

    EOS.IO 使去中心化应用(dApp)的开发、部署和管理变得更加容易。 
    EOSIO
    使用的主要部分以及此处涉及的部分是: 
    nodeos
    node + eos = nodeos - 可以使用插件配置以运行节点的核心EOSIO节点守护程序。 示例用途是块生产,专用API端点和本地开发。 
    cleos
    cli + eos = cleos - 命令行界面,用于与区块链交互并管理钱包。 
    keosd
    key + eos = keosd - EOSIO密钥安全存储在钱包中的组件。

     

    展开全文
  • 跟着晓笛学EOS

    2018-04-10 09:57:49
    EOS那些你想知道的事 1.EOS新进展 2.EOS代码精要分析 3.EOS应用开发实践
  • EOS 入门实战

    2018-05-28 14:35:36
    学习本课程,可以对EOS区块链有一个全新的认识,了解EOS原理,共识机制,以及架构设计,熟悉EOS智能合约开发基本环境搭建。能够了解EOS智能合约的开发模式,了解与EOS开发相关的C++知识,熟悉EOS智能合约开发的基础...
  • EOS是什么

    2019-02-14 08:32:32
    EOS是什么EOS是Enterprise Operation System的缩写,它是商用分布式应用设计的一款区块链操作系统。EOS是引入的一种新的区块链架构EOSIO,用于实现分布式应用的性能扩展。EOS并不像比特币和以太坊那样是货币,而是...
        
    想知道更多关于区块链技术知识,请百度【链客区块链技术问答社区】
    链客,有问必答!!
    

    EOS是什么
    EOS是Enterprise Operation System的缩写,它是商用分布式应用设计的一款区块链操作系统。EOS是引入的一种新的区块链架构EOSIO,用于实现分布式应用的性能扩展。EOS并不像比特币和以太坊那样是货币,而是基于EOSIO软件项目之上发布的代币,被称为区块链3.0。

    EOS的主要特点
    EOS有点类似于微软的windows平台,通过创建一个对开发者友好的区块链底层平台,支持多个应用同时运行,为开发dAPP提供底层的模板。
    EOS通过并行链和DPOS的方式解决了延迟和数据吞吐量的难题,EOS是每秒可以上千级别的处理量,而比特币每秒7笔左右,以太坊是每秒30-40笔。
    EOS没有手续费,在EOS上开发dApp,需要用到的网络和计算资源是按照开发者拥有的EOS的比例分配的。当你拥有了EOS的话,就相当于拥有了计算机资源,随着DAPP的开发,你可以将手里的EOS租赁给别人使用。简单来说,就是你拥有了EOS,就相当于拥有了一套房租给别人收房租,或者说拥有了一块地租给别人建房。
    EOSIO主要的程序
    nodeos(node + eos = nodeos):可以使用插件配置以运行节点的核心EOSIO节点守护进程。可以生成区块、节点验证、RPC API接口。
    cleos (cli + eos = cleos):是一个命令行工具,可以与nodeos公开的REST API进行交互并管理钱包。
    keosd (key + eos = keosd):是一个轻客户端钱包,负责管理钱包,以便在广播到网络之前保护密钥和签署交易,在本地计算机上运行并安全地将EOSIO密钥存储在钱包的组件中。
    Eoscpp:是一个编译器,将C++代码编译为WASM和ABI。它生成.wasm、.abi的文件并上传到区块链。
    下图说明了这些组件之间的基本关系。

    EOS的账户体系
    EOS的账户体系是EOS中的亮点特性之一,实现了基于角色的权限管理和账户恢复功能,使得用户可以灵活地以一种组织化的方式管理账户,并极大程度上保证了资产的安全性。

    EOS账户的特点:

    EOS中的账户名是12位可读标识符,由用户自定义,在区块链中唯一。它是转账时的标识,而其它区块链账的标识一般是地址。
    EOS的一个账户下面可以包含多对公私钥,每对拥有不同的权限,而常见区块链项目的账户只有一对公私钥。
    EOS中每个账户刚创建时一般由个体拥有,通过单一公私钥便能进行所有操作,后续可根据需要通过权限配置将该账户扩展成组织账户,由多对公私钥,即多个主体所共同控制,甚至可为组织外部个体或组织分配部分操作权限,从而实现极其灵活的组织管理方式。
    EOS上的所有交易行为都是通过账户来完成的,通过账户执行任意操作时,EOSIO首先会验证操作者是否拥有足够的权限,验证通过该操作才能生效。
    EOS账号的权限
    EOS中,每个账户创建时会自带两个原生权限:owner和active权限。这也是默认的账户权限配置,另外还支持自定义权限。

    owner权限:代表账户所有权,该权限可进行所有操作,包括更改owner权限,可由一对或多对EOS公私钥或另一账户的某权限实现权限控制。因此,代表着owner权限的EOS公私钥是最重要的,必须安全保管好。
    active权限:active即活跃权限,能进行除更改owner权限以外的所有操作,比如说转账、投票、购买ram等等。也是通过一对或多对EOS公私钥或另一账户的某权限实现权限控制。
    自定义权限:除了两个原生权限以外,EOS还支持自定义权限。我们可以将active的部分权限,比如说投票权,任命给一个自定义权限voting。那么无须owner、active权限所对应的私钥对投票操作进行签名,单单通过voting权限所对应的私钥对投票操作进行签名便可完成投票操作。
    因此通过权限配置可以将EOS账户的部分操作权限分配给第三方进行,避免了直接给出active权限的私钥,从而实现极其灵活和安全的组织管理方式。

    权重和阈值
    每个权限都会有一个阀值,初始时为1。权限下的每对公私钥都会有一个权重,初始时每个权限只有一对公私钥且权重为1。后续账户可以修改权限的阀值,可以对每个主体(即每对EOS公私钥或账号)分配不同的权重,还可以修改权限由多个主体管理。只有当公私钥的权重大于等于阀值才能拥有该权限进行相应操作。

    常见区块链项目的币就放在公钥里,只有一对公私钥,因此知道私钥便可转走,而EOS中币是放在账户里的,公钥里面放的是带权重的钥匙,转走账户里面的币需要拥有转账权限的钥匙的权重之和达到阈值才可进行。

    创建账号与转账的费用
    EOS主网中,账号的创建需要保存在EOS主网中,需要占用区块链生产节点的内存资源,一般为4K大小。而内存资源是有限的宝贵资源,因此创建账号是要成本的,一般需要花费6美元。而内存价格和EOS价格是随市场变动的,因此EOS主网账户注册价格也是变动的。因此每创建一个EOS新账号都需要其他EOS账号消耗一定量的EOS来帮忙创建,最初始的EOS账号由EOS主网在映射阶段创建完成。

    而账户进行转账等操作时,是没有手续费的,但是需要用到EOS主网的CPU和带宽资源。CPU就像会计的算账能力,带宽则可理解成转账的通道,这个需要通过EOS抵押才能换取,但是不会产生消耗,不用了可以赎回。

    EOS的资源利用机制
    我们知道,比特币和以太坊中的交易手续费机制,其目的就是防止大量交易使系统拥堵。而EOS取消了交易手续费,那么如何避免系统资源的滥用?因而EOS设计了一种新的资源使用机制:根据账户中EOS的数量来分配系统资源,包括:RAM(内存), Network BandWidth (网络带宽) 以及 CPU BandWidth (CPU 带宽)。这些资源需要购买吗?如何交易?接着往下看。

    RAM(内存):
    在 EOS 中, RAM(内存)的主要特点包括:

    要将数据存储在区块链中需要消耗RAM,比如在 EOS 中转账、购买资源、投票等操作的时候,都有可能会消耗 RAM (内存)。
    如果你的 RAM 消耗殆尽,那么你是无法进行上述这些需要消耗RAM的操作的,所以我们需要有足够的RAM。
    通过购买获得的 EOS RAM 资源可以买卖,买卖的价格根据市场行情动态调节,这个特点与买卖EOS一样。
    RAM可以通过EOS购买的方式获得也可以通过好友帮你购买,这个特点和通过抵押方式获取 CPU 资源以及 NET 资源不太一样。
    用户在买卖 RAM 资源的时候,各需要消耗 0.5 % (千分之五) 的手续费,总共是 1% 的手续费。这笔费用被存在 eosio.ramfee 中,由 BP 节点进行管理。
    内存是消耗资源,不可赎回,只能买卖。
    CPU带宽与网络带宽
    在EOS中,CPU带宽与网络带宽的特性差不多,它们的主要特点包括:

    它们采用抵押EOS的方式获取。当不再需要CPU与带宽时,抵押的EOS通证可以赎回,在赎回的时候,存在三天的赎回期。
    如果你持有全网1%的EOS,那就可以抵押这些EOS来获得全网1%的CPU和带宽。这样就可以隔离开所有的DAPP,防止资源竞争和恶意的DDOS供给,无论其他的DAPP如何拥堵, 你自己的带宽都不受影响。
    每次使用转账功能时,都会消耗网络带宽资源。
    网络带宽取决于过去三天消费的平均值,作为你下一次执行操作的费率。
    如果没有足够的网络带宽资源的话,你是无法使用 EOS 网络转账等基本功能的。
    带宽资源是可以随着时间的推移,自动释放。

    展开全文
  • eos 常用命令

    2018-09-20 23:25:11
    1、下载 EOS 源代码 如果没有安装 git , 请先下载安装 git , 网址: https://git-scm.com 下载 EOS 源码: git clone https://github.com/EOSIO/eos --recursive 2、编译安装 编译: cd eos ./eosio_...

    一、安装命令行钱包

    1、下载 EOS 源代码

    2、编译安装

    • 编译:

    cd eos
    ./eosio_build.sh

    • 安装

    cd build
    sudo make install</pre>

    二、使用钱包

    经过编译安装后就可以使用钱包了。

    1、联接主网测试

    使用钱包并不需要在本地运行节点我们可以在 https://eospark.com 这个网站上查询到所有的超级节点列表在节点列表名称上点击能够显示节点的一些细节情况:

     

    image

     

    我们选择使用佳能节点

    cleos -u https://mainnet.eoscannon.io get info
    {"server_version": "db031363","chain_id": "aca376f206b8fc25a6ed44dbdc66547c36c6c33e3a119ffbeaef943642f0e906","head_block_num": 2010556,"last_irreversible_block_num": 2010228,"last_irreversible_block_id": "001eac74165def938d6da71a4806bf564732283edadffdcf99bfb9710b1e0233","head_block_id": "001eadbc12fe5762a192887d8495aa18ebadba94cd1d9165cfdc7a2a26632719","head_block_time": "2018-06-22T07:26:49.500","head_block_producer": "bitfinexeos1","virtual_block_cpu_limit": 200000000,"virtual_block_net_limit": 1048576000,"block_cpu_limit": 197661,"block_net_limit": 1048192}

    确保为主网:chain_id=aca376f206b8fc25a6ed44dbdc66547c36c6c33e3a119ffbeaef943642f0e906

    2、简化命令行使用

    我们可以在 .bash_profile 文件中加入以下一行:

    alias eos='cleos -u https://mainnet.eoscannon.io'

    这样我们输入 eos 就是输入了 cleos -u https://mainnet.eoscannon.io,以后就不用每次都要加入要连接的节点。

    3、准备使用钱包

    • 如果以前测试运行过节点使用钱包时有可能会出错这时可以删除以下目录

    Mac OS: ~/Library/Application Support/eosio/nodeos/data
    Linux: ~/.local/share/eosio/nodeos/data

    • 如果以前用过 cleos 建立过钱包文件可以删除钱包文件钱包文件在用户目录~/下。

    rm -rf ~/eosio-wallet

    4、新建钱包

    因为新建钱包导入私钥过程不需要联网我的做法是断网、重启。在不联网的情况下操作。

    • 新建钱包
       cleos wallet create      
        "/usr/local/bin/keosd" launched
         Creating wallet: default
        Save password **to** use in the future **to** unlock this wallet.
        Without password imported keys will not be retrievable."PW5JVFbLPJJ7VN9ukS2Zjjuq8....hCiUCM5CRXydZaPtjsbGy"
    
    • 如果使用 cleos wallet create -n 钱包名可以自定义钱包的名字我们可以使用 cleos 建立无数个钱包。当没有定义名字时使用 default 作为钱包名。

    注意:建立钱包时会给你一个以后用来打开钱包的密码密码很长不能自定义如果保存在电脑里安全会很有问题但如果不保存在电脑里就不能复制粘贴估计没人愿意一个个把密码敲入吧。

    不知道其它人是如何处理这个事情的我是把它保存在一个文本中然后加密后放在 u 盘使用时断网打开加密的文件然后在断网的情况下解锁钱包后。再连网使用。

    • 如果在新建钱包时出现如下问题:

    "/usr/local/bin/keosd" launched
    Unable to connect to keosd, if keosd is running please kill the process and try again.

    这个是 EOS 的一个BUG**,**可以先删除 keosd 进程:`killall keosd`**,**然后加入 `--wallet-url` 参数来解决:
    
    cleos --wallet-url http://127.0.0.1:8900 wallet create
    
    • 导入私钥

    cleos wallet import <你的私钥>

    • 可以多建几个私钥备用

    使用 cleos create key 生成私钥然后用cleos wallet import <你的私钥>导入钱包备用。

    5、最后备份钱包文件

    钱包列表:cleos wallet list
    私钥列表:cleos wallet keys

    复制用户目录下的 eosio-wallet 到 U 盘。将加密过的密码文件也放入 U 盘保存。

    6、开始使用钱包

    • 断网重启

    打开钱包:

    cleos wallet open

    插入 u 盘解密文件后输入钱包密码。

    解锁钱包:

    cd eos
    ./eosio_build.sh

    • 好了接下来我们就可以联网使用钱包进行转帐等操作。

    1、查询主网自动分配的账户名

    cleos get accounts <你的公钥>

    2、注册新账户账户名必须12位字符(可用字符:12345abcdefghijklmnopqrstuvwxyz)

    eos system newaccount --stake-net '0.001 EOS' --stake-cpu '0.02 EOS' --buy-ram-kbytes 3 <自动分配的账户名> <新注册账户名> <你的公钥>

    3、查看账户信息

    • 查看账户概要信息(可用资源、投票等)

    cd eos .
    ./eosio_build.sh

    1、查看账户抵押信息

    cd eos
    ./eosio_build.sh

    2、 看账户抵押信息

    cd eos
    ./eosio_build.sh

    3、查看账户余额

    cd eos
    ./eosio_build.sh

    4、EOS转账

    eos transfer <转出账户名> <转入账户名> '0.0001 EOS' 'memo'

    5、关闭钱包

    eos wallet lock

    6、竞拍短名

    用于少于12字符的短账户名每24小时只成交一个。

    • 查询短名出价情况

    eos system bidnameinfo <短名>

    • 参与竞拍

    eos system bidname <本人账户名> <短名> '0.0001 EOS'

    7、投票

    • 查看账户抵押信息

    eos system listbw <本人账户名>

    • 可追加抵押增加票数(抵押EOS可分别获得相应网络、CPU资源票数为两项之和)

    eos system delegatebw <本人账户名> <本人账户名> '0.001 EOS' '0.02 EOS'

    • 查看节点清单

    eos system listproducers

    • 投票 (可以重新投票哈哈终于投了几个自己喜欢的节点)

    eos system voteproducer prods <本人账户名> <节点账户名> <节点账户名>

    • 查看账户及投票信息

    eos get account <账户名>

    • 撤销抵押(同时撤销相应的票数。三天后到账)

    eos system undelegatebw <本人账户名> <本人账户名> '0.001 EOS' '0.02 EOS'

    参考:
    5分钟学会注册EOS主网账户、投票和发币

    5分钟学会注册EOS主网账户、投票和发币

    第一步: 安装docker

    https://www.docker.com/community-edition

    install docker for CentOS. (其他操作系统看上面链接)

    sudo yum install -y yum-utils device-mapper-persistent-data lvm2
    sudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
    sudo yum install -y docker-ce
    sudo service docker start
    
    

    第二步:部署EOS钱包服务

    1. 下载EOS官方镜像
    docker pull eosio/eos
    
    

    2. 创建钱包目录后续生成的钱包文件均保存在该目录下

    mkdir -p /data/eosio/eosio-wallet
    
    

    3. 创建钱包服务

    如果曾经创建过keosd容器需要先删除

    docker stop keosd
    docker rm keosd
    
    

    创建keosd容器启动服务

    docker run -d --restart=unless-stopped --name keosd   \
      -v /data/eosio/eosio-wallet:/opt/eosio/bin/data-dir  \
      -v /data/eosio/eosio-wallet:/root/eosio-wallet \
      -t eosio/eos /opt/eosio/bin/keosd  \
      --wallet-dir /opt/eosio/bin/data-dir \
      --http-server-address=127.0.0.1:8900 
    
    # 查看日志
    docker logs keosd
    
    

    第三步:创建本地钱包并导入私钥

    1. 创建EOS操作命令cleos别名(请选择可信的正式节点接入地址

    alias cleos='docker exec -i keosd /opt/eosio/bin/cleos  --wallet-url http://127.0.0.1:8900  -u http://mainnet.eoscalgary.io  '
    
    # 查看主网信息
    cleos get info
    
    # 确保为主网:chain_id=aca376f206b8fc25a6ed44dbdc66547c36c6c33e3a119ffbeaef943642f0e906
    
    

    eospark.com收集了各节点接入地址端口。以下地址供参考验证:
    http://mainnet.eoscanada.com
    http://mainnet.eoscalgary.io
    http://mainnet.eoscannon.io
    http://mainnet.genereos.io

    2. 创建钱包记录钱包密码以备将来使用(钱包存在本地/data/eosio/eosio-wallet目录下)

    cleos wallet create -n my
    
    

    钱包一段时间不用会自动锁定再次使用需要用钱包密码解锁

    cleos wallet unlock -n my
    
    

    3. 导入私钥(私钥保存在钱包内用于对交易签名不会向外泄露)

    cleos wallet import -n my <你的私钥>
    
    

    4. 必要时可创建新的密钥对(可用于新建账号或变更权限记得妥善抄写保存私钥)

    cleos create key
    
    # 确保密钥抄写无误,对照抄写的密钥进行导入,切勿复制粘贴
    cleos wallet import -n my <新私钥>
    
    

    第四步:注册EOS账户名

    1. 查询主网自动分配的账户名
    cleos get accounts <你的公钥>
    
    

    2. 注册新账户账户名必须12位字符(可用字符:12345abcdefghijklmnopqrstuvwxyz)

    # 抵押0.001EOS用于网络,0.02EOS用于CPU,购买3k内存(约0.0465EOS)可满足新账户转账最低资源需求 
    cleos system newaccount --stake-net '0.001 EOS' --stake-cpu '0.02 EOS' --buy-ram-kbytes 3 \
      <自动分配的账户名> <新注册账户名> <你的公钥>
    
    

    3. 查看账户信息

    # 查看账户概要信息(可用资源、投票等)
    cleos get account <账户名> 
    cleos get table eosio  <账户名>  userres
    
    # 查看账户抵押信息
    cleos system listbw <账户名> 
    cleos get table eosio <账户名>  delband
    
    # 查看账户余额
    cleos get currency balance eosio.token  <账户名> 
    cleos get table eosio.token <账户名>  accounts
    
    

    4. EOS转账

    cleos transfer <转出账户名>  <转入账户名>  '0.0001 EOS' 'memo'
    
    

    5. 竞拍短名(少于12字符的短账户名需竞拍每24小时只成交一个。目前只能出价主网激活14天后才正式交易)

    # 查询短名出价情况
    cleos system bidnameinfo  <短名> 
    
    # 参与竞拍
    cleos system bidname <本人账户名>  <短名>  '0.0001 EOS'
    
    
    1. 账户转让(变更账户active和owner)
    # 变更账户active权限为对方公钥
    cleos set account permission <转让账户名> active '{"threshold":1,"keys":[{"key":"<对方公钥>","weight":1}]}' owner
    
    # 或变更账户active权限为对方账户名(active权限)
    cleos set account permission <转让账户名> active '{"threshold":1,"keys":[],"accounts":[{"permission":{"actor":"<对方账户名>","permission":"active"},"weight":1}]}' owner
    
    # 变更操作消耗网络和CPU资源,如提示不足需追加:
    cleos system delegatebw <本人账户名>  <转让账户名>  '0.001 EOS' '0.02 EOS'
    
    

    变更active权限后对方已经可以操作可以通过小额转账进行验证

    cleos transfer <本人账户名>  <转让账户名>  '0.0001 EOS' 'memo'
    
    # 通知对方做以下转出操作,确保对方密钥无误
    cleos transfer <转让账户名>  <本人账户名>  '0.0001 EOS' 'memo'
    
    

    确认对方可以转出后再执行下一步变更owner以免密钥错误账户永久丢失

    # 变更账户owner为对方公钥
    cleos set account permission  <转让账户名>  owner '{"threshold":1,"keys":[{"key":"<对方公钥>","weight":1}]}' -p <转让账户名>@owner
    
    # 或变更账户owner为对方账户名(owner权限)
    cleos set account permission <转让账户名>  owner '{"threshold":1,accounts":[{"permission":{"actor":"<对方账户名> ","permission":"owner"},"weight":1}]}' -p <转让账户名>@owner
    
    

    第五步:投票

    1. 查看账户抵押信息
    cleos system listbw <本人账户名> 
    
    

    2. 可追加抵押增加票数(抵押EOS可分别获得相应网络、CPU资源票数为两项之和)

    cleos system delegatebw <本人账户名>  <本人账户名>  '0.001 EOS' '0.02 EOS'
    
    

    3. 查看节点清单

    cleos system listproducers
    
    

    4. 投票 (可重新投票。散户投票策略:只投21名之后的节点。锦上添花不如雪中送炭)

    cleos system voteproducer prods <本人账户名>  <节点账户名> <节点账户名> ……
    
    

    5. 查看账户及投票信息

    cleos get account <账户名> 
    
    

    6. 赎回抵押(同时撤销相应的票数。三天后到账)

    cleos system undelegatebw <本人账户名>  <本人账户名>  '0.001 EOS' '0.02 EOS'
    
    

    7. 领取退款(三天后执行退款操作将赎回款转入账户余额)

    cleos push action eosio refund '["<本人账户名>"]' -p <本人账户名> 
    
    

    第六步:发币!

    1. 注册代币发行账户
    cleos system newaccount --stake-net '0.1 EOS' --stake-cpu '1 EOS' --buy-ram-kbytes 200 \
       <本人账户名> <代币发行账户名> <代币发行账户公钥>
    
    

    发行代币需要一定系统资源如不够可追加:

    # 抵押EOS追加网络和CPU资源
    cleos system delegatebw   <本人账户名> <代币发行账户名>  '0.1 EOS'  '1 EOS'
    
    # 消耗EOS购买内存资源
    cleos system buyram   <本人账户名> <代币发行账户名>  '1 EOS'
    
    

    2. 部署代币合约

    cleos set contract <代币发行账户名>  contracts/eosio.token -p <代币发行账户名> 
    
    

    3. 创建代币指定发行人、最大发行量和代币符号

    cleos push action <代币发行账户名>  create \
      '{"issuer":"<代币发行账户名>", "maximum_supply":"10000000000.0000 <代币符号>"}' \
      -p <代币发行账户名> 
    
    # 查看代币发行概况
    cleos get currency stats <代币发行账户名>  <代币符号>
    
    

    4. 发行代币(先给自己发10亿……)

    cleos push action <代币发行账户名>   issue  \
      '[ "<代币接收账户名>", "1000000000.0000 <代币符号>", "memo"  ]' \
      -p <代币发行账户名>  
    
    

    5. 查看代币余额

    cleos get currency balance <代币发行账户名> <代币接收账户名>
    
    

    6. 代币转账

    cleos push action <代币发行账户名> transfer \
      '[ "<转出账户名>", "<转入账户名>", "10.0000 <代币符号>", "memo"  ]' \
      -p <转出账户名>
    
    

    最后:清理

    操作完成后如不再使用可停止钱包服务并删除钱包文件确保安全

    docker stop keosd
    docker rm keosd
    rm /data/eosio/eosio-wallet/my.wallet
    

     



    作者:廖全磊LesterLiao
    链接:https://www.jianshu.com/p/8e11fc320920
    來源:简书
    简书著作权归作者所有,任何形式的转载都请联系作者获得授权并注明出处。

    展开全文
  • EOS DApp开发入门(一)

    千次阅读 2019-01-09 03:41:26
    今天来看看EOSIO的DApp模版例程(boilerplate的github地址)。 环境说明 操作系统: MacOS 10.14.1  Docker社区版 for mac: Version 2.0.0.0-mac81, docker engine: 18.09.0;(查看: docker version) ...
  • 继续跟随EOS开发者教程:https://developers.eos.io/eosio-home/docs 从踩坑中进步(就怕项目黄了…),踩坑的总体思路是:学习 -&amp;amp;amp;gt; 开发dapp-&amp;amp;amp;gt;源码 本文仅代表个人观点,...
  • EOS 错误码整理

    2019-06-03 14:30:39
    EOS 错误码整理 EOS 目前大约有180种错误类型,虽然有错误码,但是还是很笼统的,具体的报错信息还得看detail里面的内容 一、常见的错误码以及issue上对应的错误记录 3010001 Invalid name 账户名格式1-12位(a-z...
  • EOS源码框架解析(一)

    千次阅读 2018-09-06 08:19:55
    eos项目(v1.0.2)主要可以分为以下八个模块: 编译模块 主程序模块 依赖库模块 插件模块 智能合约模块 测试模块 Docker工具模块 文档说明模块   本篇教程首先介绍前三个...
  • 一 基础概念 (1)Byzantine Fault Tolerance Byzantine Fault Tolerance(拜占庭容错)来自与拜占庭将军问题。该问题可以表述为几位将军从多地共同攻城,已知只有同时全体决定进攻或不进攻才能保证胜利或不损伤,...
  • 普元EOS开发平台

    2017-03-22 13:41:28
    Primeton EOS® Platform基于JaveEE、Eclipse等开放的技术和平台,采用了先进的SOA架构和标准规范,并通过构件化、图形化、一体化的平台产品为客户提供了完整的覆盖SOA应用全生命周期的支撑,从设计、开发、调试和...
  • Windows下搭建EOS开发环境(js4eos)

    千次阅读 2018-11-02 10:54:47
    导致Windows下开发EOS非常困难,不得不借助Docker等工具,而这些搭建过程也是不简单。今天给大家介绍一个Javascript 工具js4eos.只需要一条命令即可使用EOS及编译部署EOS合约。 安装npm js4eos也是一个npm程序,...
  • 普元EOS开发帮助手册

    2018-06-13 18:41:21
    普元EOS开发帮助手册,普元EOS开发帮助手册,普元EOS开发帮助手册,普元EOS开发帮助手册
  • EOS开发启动指南

    2019-05-22 12:05:00
    我想帮助其他开发人员和工匠了解EOS以及为什么它是开发和部署去中心化应用程序的良好环境。 演讲大师兼企业家,低语者保罗格雷厄姆曾经说过:“伟大的黑客倾向于聚集在一起”和“像所有工匠一样,黑客喜欢好工具。...
  • EOS开发资源汇总

    2018-11-04 01:01:45
    作者:EOS Tribe(@sf2) 在EOS主网络推出仅三个月后,EOS区块链正迅速增长其用户和开发者社区。 在撰写本文时,EOS已达到20,000,000多个可逆块,并实现了大约3996个每秒事务(TPS)的吞吐量。 更令人印象深刻...
  • EOS开发部署大全

    2018-11-28 10:12:50
    本人EOS从0实战爬坑的部署大全,基本上涵盖常见的issues和解决方案
  • EOS开发资源及工具集合(完整汇总版) BinSTD 今天 19:30:07 0 0 ETH开发资源篇 一、开发语言 ·&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;...
  • eos开发页面标签

    千次阅读 2013-07-31 12:29:33
    eos 中使用流程的,可以默认选择派发人,下面是方法: String preDeptId1 = "121"; com.boco.eoms.taglib.id2Name id2Name=new com.boco.eoms.taglib.id2Name(); String preDeptName1=id2Name.seachName(preDeptId...
  • EOS开发指南

    2019-05-22 11:23:26
    我想帮助其他开发人员和工匠了解EOS以及为什么它是开发和部署去中心化应用程序的良好环境。 演讲大师兼企业家,低语者保罗格雷厄姆曾经说过:“伟大的黑客倾向于聚集在一起”和“像所有工匠一样,黑客喜欢好工具。...

空空如也

1 2 3 4 5 ... 20
收藏数 29,304
精华内容 11,721
关键字:

eos