• Æternity 区块链白皮书 at 2018年12月13日

    III. APPLICATIONS(应用)

    AE区块链中无状态的智能合约使得创建应用变得简单,特别适合大批量的使用。

    A. Blockchain essentials(区块链要点)

    区块链的必需要素是AE币、钱包、域名和其他相关概念。把这些基础组件模块化,可以给其他应用重用和改进。

    A.1)Identities(身份):每个帐户都将拥有一个唯一ID。用户可以注册唯一的名称,并将名称链接到数据结构的Merkle-root(默克尔根)。数据结构可以包含唯一ID以及相关账户的其他信息。 我们的目标是使用Schema.org的JSON格式来表示人或公司等[13]。

    A.2)Wallet(钱包):钱包是用于与AE区块链交互的软件。 钱包管理着AE币的私钥,并创建和签名交易。 可以使用钱包发送通道交易,并在通道网络中使用应用。

    A.3)Proof of existence(存在证明):一种交易类型允许发布任何数据的哈希,系统参与者可以使用头信息来证明在该时间点存在这些数据。

    B. State channel applications(状态通道应用)

    状态通道中的智能合约对于需要高交易吞吐量的微服务是种完美的解决方式。

    B.1)Toll API(收费API):

    当今大多数API是公开的可以供任何人调用,也有一部分API是通过用户名/密码或者令牌访问模式保护起来。支付通道运行一种新类型的API,每次使用HTTP调用请求API将支付费用。API支付调用可以解决DDOS问题,从而更容易构建高可用高质量的API。这种API对于即将到来的某些业务是至关重要的,并且在即将出现的分布式经济中扮演至关重要的角色。这为信息所有者创造了一种经济激励模式,使得他们把私有数据公开化。

    B.2) Insured crowdfunding(安全众筹):我们可以使用dominant assurance contracts(优先保障合约)[need cit.]来实现安全的众筹。一些用于公益众筹的智能合约,例如建造桥,学校或市场。

    优先保障合约和传统保障合约(如Kickstarter)是不同的,因为前者对于参与者是采用优先策略。如果众筹失败,所有参与者的AE币和附带利息就会返回,因此合约保障了参与者因众筹失败导致的流动性损失。

    B.3)Cross-chain atomic swaps(跨链原子互换):跨链原子互换允许AE币和比特b币之间无需信任的交换 [14],[15]。这些可以使用哈希锁来实现,锁住两个区块链上相同价值的交易。

    B.4) Stable value assets and portfolio replication(稳定价值资产和资产组合复制):我们可以使用智能合约来编程实现与现实世界中资产等值的合成资产。例如:我们创造与黄金等值的资产,合成衍生品以相等和相反对的形式存在。对于一个用户来说,拥有一个随金价变化的资产,那么一个不同的用户必须拥有与金价相反变化的资产。例如,Alice和Bob可以创建一个合约,其中Alice拥有1克黄金。合约的资金转移规则为1克黄金等值的AE币将为发送给Alice,剩余资金发送给Bob。合约有一个到期日期,到时黄金的价格将确定,然后资金将按照合约规则分发给Alice和Bob。

    B.5) Event contracts(事件合约):当事件发生时,事件合约将支付资金,事件没有发生时,则不需要支付,这取决于预言机答案。这个特点很有趣,可以组合起来实现不同的应用:

    a)Insurances(保险):我们可以使用事件合约来实现保险,例如天气如果不好,原本价格高昂的音乐会门票将变得毫无价值。因此,如果预言机可以决定那天下雨这个事件发生后,音乐会观众可以收到一部分的补偿的话,那么投资将得到保护,人们在情感上也可以更好接受。稍微严禁一点,农民经常对一个季节的下雨量感兴趣,我们可以保障他们免受干旱时农作物减产导致的经济损失。

    b)Whistleblowing(揭秘):事件合约也可以用于激励敏感信息的揭秘。例如,我们可以打赌事件“A公司使用非法农药的信息将在2017年1月24日或之前披露”。任何知道这类信息的知情人,将会被激励去打赌事件的发生并泄漏相关信息。

    B.6) Prediction markets(预测市场):预测市场的作用是让用户打赌未来的事件是否会发生,从赌注的价格我们可以预测未来事件发生的可能性[3],[8],[16],它们是以给定的价格衡量未来的最准确方式[need cit.],一旦事件发生,市场将用预言机来结算。

    如第II-D部分所述,我们可以使用预测市场来预测软件的哪些更新将是有益的,哪些是有害的。 我们也可以用来估算一个选举需要多少候选人才能完成,因此这可以更容易地发现谎言和无根据的承诺。

  • Æternity 区块链白皮书 at 2018年12月13日

    A. Tokens, accounts and blocks(代币、账户和块链)

    虽然智能合约的“无状态”,已经是合约开发者的一种共识,但是AE区块链仍然会对一些预定义的组件保持状态。马上我们将按照每个模块来阐述这些内容。 为了简单起见,本节假设每个节点都记录着整个块链,一些可能的优化在II-E章节中进行描述。

    A.1)Access token, Aeon(使用代币,AE币):使用区块链不是免费的,需要用户花费一个名为aeon(AE币)的代币。AE币可以用于支付平台上任何消耗资源的应用,比如在平台上实现的基础金融应用。存在与创世块中的AE币,将通过以太坊的智能合约来分发,未来AE币将通过挖矿的方式发行。平台中所有的手续费都通过AE币来支付,所有智能合约的流通媒介也是AE币。

    A.2)Accounts(账户):每个账户都包含地址、AE币余额和一个随机数,随机数的生成规则随着每笔交易和块高度而变化。同时每个账户根据开户时间必须要支付一笔小额手续费,创建和保存账户的成本用于防止垃圾数据的无限制膨胀,而删除账户回收空间则可以获得一定的奖励。

    A.3)Name system(域名系统):许多区块链系统的账户地址都是一串哈希值,对用户来说无可读性。借鉴Aaron Swartz的工作和域名币设计,AE的特性之一是拥有一个分布式又安全的域名系统,使得账户可以支持人性化的名字[9]。区块链状态中包含一个唯一性字符串到固定大小字节数组的映射,这些字符串可以用来指向帐户地址或者默克尔树的哈希。

    A.4)Block Contents(块内容):每个块包含以下组件:

    • 上一个块的哈希。
    • 交易的默克尔树。
    • 帐户的默克尔树。
    • 域名的默克尔树。
    • 已开通道的默克尔树。
    • 还没有回答问题的预言机的默克尔树。
    • 预言机答案的默克尔树。
    • 默克尔证明的默克尔树。
    • 随机数发生器当前的熵。

    前一个块的哈希用来维护区块链的有序性,交易树包含了当前块中的所有的交易。 除了共识投票树以外,其他所有的树都在共识机制下:如果一棵树从一个块到下一个块 之间发生了变化,那这个变化必须通过交易打包到一个新的块链交易树中,并且一个默克尔更新证明必须包含在块的证明树中。 剩下三棵树的作用,希望在接下来的章节中能够描述清楚。

    B. State channels(状态通道)

    在最近的区块链发展中,一个最有趣的发现是状态通道,它们在大多数情况下按照基本原则执行,只有人受交易影响时才需要去了解它。 本质上,交易方在块链上实例化一些状态,例如:一个以太坊智能合约或一个比特币多方签名。然后他们在彼此间简单的发送经过签名更新后的状态,关键点在于他们中的任何一个都可以使用这些来更新块链中的状态,虽然在大多数情况下不需要这么做。 这将使得交易各方处理交易的速度可以与信息传输一样快,而不需要等到交易已验证-最终确定-通过区块链共识机制这些流程的执行完成。

    在AE区块链中,唯一需要更新的状态是AE币的转移,并且只有交易方已经存入通道中的AE币才可以被转移。 这使得所有通道彼此独立,其直接好处是任何通道中的交易都可以并行处理,极大的提高了交易吞吐量。

    区块链只用于处理最终交易输出或解决所产生的冲突,这大致类似于司法系统。 不过,因为区块链的行为将是可预测的,对状态通道预期输出结果产生争议是没有益处的;恶意者也没有动力去做不正确的行为,只能在区块链的最终状态上作处理。所有这些综合起来,这将提升几个数量级的交易速度和交易量,而且保证了隐私性。

    B.1) Smart Contracts(智能合约):虽然链上唯一可以保存的状态是AE币的转移,但是AE区块链仍然有一个图灵完备的虚拟机可以运行“智能合约”。 AE区块链上的合约是一种严格的协议,按照一些规则分配资金,与以太坊上的合约相比有一些明显的不同。两个显著的差异是,默认情况下只有双方才知道给定的合约,而且只有双方拥有开放的状态通道时才可以创建有效的合约。如果双方同意合约,他们签名并保留副本以备将来参考,只有当双方对结果产生争议时,才提交到区块链上,在这种情况下,合约代码只作为的交易的一部分保存,而不保存其他任何状态,如果争议的情况发生,区块链会根据合约来重新分配AE币,并且关闭状态通道。

    1 macro Gold f870e8f615b386aad5b953fe089;
    2
    3 Gold oracle
    4 if 0 1000 else 0 0 end
    5 0
    

    示例1:一个简单的合约编码,可以用来对赌黄金价格,编写语言使用的是Chalang类似Forth-like语法,将在第IV-A节中介绍。

    例如,示例1显示了一个非常简单的合约,在一定时间内根据黄金的价格来打赌。 第1行,macro是宏关键字,Gold是宏的名称,后面的哈希值是预言机中问题的唯一标识,问题的内容为在2016年12月1日时如果黄金价格低于38美元/克,则这个宏的返回结果为true。合约的正文在第2-4行显示:我们首先把问题的唯一标识压入栈中,并使用预言机调用它,预言机会把答案放到栈顶部, 我们用这个答案作条件判断:如果预言机返回true,我们把0和1000放到栈中,0表示没有AE币需要被消耗,1000表示通道中有1000个AE币需要被转移给第一个参与方,反过来如果返回false,我们把0和0放到栈中,第二个0表示另一个参与方获得通道中所有的AE币,最后的0表示通道状态的随机值,在实际使用场景中,随机数将在部署时生成。

    一个需要注意的重要事情是AE区块链上的智能合约不维护自己的任何状态,合约状态是由交易方维护,并在合约执行时作为输入。每个合约本质上是个纯函数,根据一些输入参数,输出新的通道状态。 一般在软件开发中,使用纯函数是有益处的,特别是在金融应用的开发过程中,这已在学术界和工业界广泛论证了数十年[10] [need cit.]

    1 : hashlock
    2 swap
    3 hash
    4 == ;
    

    示例2:一个简单的哈希锁

    a)Contract interaction and multi-step contracts(合约交互和多步骤合约):即使所有的合约是无状态的并且互相独立的执行,但仍然可以通过hashlocking(哈希锁)[need cit.]来实现合约之间的交互和状态关系。 一个简单的哈希锁如示例2,第1行,我们定义一个函数称为hashlock,给定一个哈希值h和秘密值s。 在第2行对秘密值s重新赋值,然后在第3行中对秘密值s通过hash(v)函数进行哈希运算,最后在第4行比较运算后的哈希值和原来哈希值h,如果相等,则重新赋值后的秘密值s与原来的值是一致的。通过对该函数秘密值s的控制,可以实现对不同智能合约的执行逻辑进行控制。

    1 macro Commitment a9d7e8023f80ac8928334 ;
    2
    3 Commitment hashlock call
    4 if 0 100 else 0 50 end
    5 1
    

    示例3:哈希锁可以通过中间人来实现AE币的转移

    这个简单的例子显示,哈希锁使得不同用户在状态通道间存在一条路径,即使不共享状态通道,也可以实现AE币的转移。例如,如果Alice和Bob有一条状态通道,Bob和Carol也有一条通道,然后Alice和Carol的交易可以通过Bob来实现, 他们之间通过创建两个合约副本,每个通道一个合约副本来完成交易,见示例3,第1行的宏Commitment表示Alice所选择的秘密值的哈希,在第3行我们把它放到栈中并调用哈希锁函数,第四行条件分支的执行取决于哈希锁函数的返回值,一旦这些合约已经由各方签名,则Alice揭示秘密值,这允许Bob和Carol使用它来执行合约的条件逻辑,从而完成AE币的转移。

    1 macro Commitment a9d7e8023f80ac8928334 ;
    2
    3 Commitment hashlock call
    4 if State33 else State32 end
    5 call
    

    示例4:一个简单的例子,使用哈希锁在通道中玩一个多方参与的游戏

    哈希锁也可以用于在状态通道中实现多方参与的游戏,见示例4,每个人都和游戏管理者建立了一条状态通道,每个通道中都包含了一个相同的智能合约,通过函State32来声明,当前我们处于游戏状态32,以及我们想要同时把所有通道中的游戏状态更新到33。当游戏管理者揭示秘密值时,所有通道中的合约将同时执行更新。

    b)Metered execution(执行计量):智能合约执行时的计量方式类似于以太坊的“gas”,但AE区块链还使用两个与其不同的资源计量,一个时间,一个是空间。 在合约被执行时,这两种资源都需要请求方使用AE币来支付。这种方式可能被认为是不可取的,因为一开始有可能是交易的另一方需要用区块链来解决争议。 但是,只要通道中的钱不都是用于投注,这个问题可以在合约代码中有效地规避,因为可以把资金从一方重新分配给另一方。 从最佳实践上来说,应该避免把所有资金放在一个通道中交易,因为它不利于同另一方交易失败后的通道关闭。

    B.2) 示例:让我们将所有这些想法落地。

    实际上,如果Alice和Bob想在AE区块链上使用状态通道交易,他们将通过如下过程:

    1) Alice和Bob签名一笔交易,指定每个人存放多少资金存放到状态通道中,并将其发布到区块链上。

    2) 一旦区块链打开通道,他们都可以在通道上创建新的状态,并互相发送和签名新的状态。 通道的状态可以是资金在通道中的重新分配,也可以是一个合约用于决定资金新的分配。每个通道的状态都会生成一个随机数,并由参与方签名,因此如果发生争议,一个最新的合法状态将被提交到区块链并强制执行。

    3) 通道可以有两种不同的方式关闭:

    a) 如果Alice和Bob确定他们已完成交易并达成最终的一致,他们需要同时签名并展示,然后提交到区块链,这将把通道中的资金按约定分配并关闭通道。

    b) 如果Alice因为一些原因拒绝签名关闭交易,那么Bob可以把双方最新一个已签名的状态提交到区块链用于关闭通道,这将开始一个倒计时,如果Alice认为Bob是不诚实的(其提交的状态不是最新的或者有问题),她有机会在倒计时结束之前,把一个双方签名的拥有更高随机数的状态提交到区块链, 如果她这样做的话,通道将立即关闭,否则等倒计时结束后关闭。

    C. Consensus mechanism(共识机制)

    AE区块链使用Proof-of-Work和Proof-of-Stake混合共识机制。 块链的顺序性将由Proof-of-Work决定,某些系统变量将由链上的预测市场系统确定,这允许用户参与并引入他们的知识。 对于PoW算法,目前我们倾向于一种Tromp’s Cuckoo Cycle(布谷鸟循环)算法的变种,其是基于内存限制的“间接式工作量证明”,因为它只需较少的电力就可以运行,但具有其他一些限制因素,其中之一是内存延迟可用性,这种算法使得在智能手机上挖矿变得可行。

    Tromp写道:

    “[布谷鸟循环]是一种即时可验证的基于内存限制的PoW算法,它的独特之处在于延迟而不是计算。 在这个意义上说,基于布谷鸟循环的挖矿是一种ASIC开采的形式,应用在DRAM芯片上随机读写数十亿位,甚至当手机整夜充电时挖矿也不会有太多数量级的效率损失,这种不以盈利为目的碰运气的挖矿方式,使得挖矿设备的扩张前景将会非常巨大,这益于挖矿的分散化。“

    预览:共识机制在AE区块链中还有一些非常规作用, 除了确认新的块以为,它也确认预言机的问题和系统参数值,特别是共识机制本身也是可以改变的。但是,应该指出的是,这并不是完全没有问题。例如,如果一个简单的工作量证明机制被使用,贿赂矿工破坏预言机将会变得低成本。 因此,AE区块链将使用工作量证明和权益证明混合算法,平衡利用两者的好处。 独立于此,PoW将被用于发行新产生的AE币。

    备注:最初的意图是使用100%的权益证明算法,但是我们认为100%的PoS系统是不可能实现的。

    C.1)Oracles(预言机):这是大多数智能合约的一个关键特性,不管是以为文本还是代码形式描述,都要有能力从环境中带入价值,例如不同物品的价格或者一个特定的事件是否会发生,一个智能合约系统如果没有这种能力,本质上是个封闭的系统,可以说没有太大的用处。 这是个普遍接受的事实,并且已经有几个项目尝试将外部数据以分布式的方式带入区块链中[8]。 然而,要确定其是否可行,本质上需要在底层共识机制上面再实现一个新的共识机制。

    在区块链上同时运行两个共识机制和把它们分开单独运行一样昂贵。 此外,这增加了不安全性,因为最不安全的那个将被攻击并产生“错误”值。 因此,我们建议将两个共识机制合并成一个,本质上用来确认系统状态的共识机制,也可以用来确认外部世界的状态。

    这种方式通过如下工作。 任何AE币持有者都可以通过提交一个回答yes或no的问题来启动一个预言机,当这么做时,也需要指定回答这个问题的时间区间,可以是从现在开始,或者将来的某个时间。 启动预言机的用户需要在这个时间区间内按比例存放一定数量的AE币作为押金,如果有用户提交了正确可接受的答案,那么押金将会被归还,否则将会被消耗掉。区块链将为预言机生成一个唯一标识符,当它一旦可用时,可以被用来检索答案。

    一旦到了需要回答问题的时间,启动预言机的用户可以免费提供一个答案。在启动预言机的用户提供了一个答案或者直到一段时间过去后,任何其他用户可以通过提交相同数量的AE币作为押金来提出反诉,如果时间到期后没有用户提出反诉,那么启动预言机用户所提供的答案将被接受,押金将归还。 如果有任何反诉被提出的话,区块链的共识机制将回答预言机的答案,这个代价会比较高,但是由于我们至少可以获得其中一笔押金,因此我们可以这么使用。

    D. Governance(治理)

    在过去基于区块链的系统治理一直是个很大的问题,每次系统升级都需要硬分叉,这通常会导致利益持有人之间大量的讨论,甚至在源代码中修正变量这种简单的事情。我们已经看到了涉及比特币块大小的争论,当用户的激励措施与决策制定者不一致时,统一意见变得非常困难,而且也没有明确的升级路径。我们也看到了更为复杂的治理决策,比如修复“The DAO”智能合约中的bug,这需要系统开发人员快速的干预。

    这些系统的主要问题容易被识别 - 协议升级或更新的决策制定过程定义不明确且缺乏透明度。AE区块链的治理机制是共识的一部分,它使用预测市场来尽可能的达成效率性和透明性。

    此外,共识机制由多个变量来定义,这些变量决定了系统的功能是什么样的以及如何被每个新块轻量化的升级,这些变量涉及从交易或者询问预言机花费的成本到修改基本参数的值,如出块时间。

    通过预测市场对协议中定义的变量进行分析,用户可以学习到如何有效地改进协议。 通过预测市场对潜在的硬分叉进行分析,我们可以帮助社区达成共识,使用哪个版本的代码。每个用户为自己衡量选择最优的方式,这是种简单的默认策略,将最大化其持有的价值。

    E. Scalability(扩展性)

    E.1)Sharding trees(分片树):到目前为止提出的架构是高度可扩展的,即使每个用户只保存其关心的一部分块链状态,而忽略其他用户的数据,也可以使区块链正常运行起来。新用户需要至少一个状态副本来确定他们关心的子状态,但是我们可以在任意多个节点上分割这些数据,使得每个节点的负载都尽量的小。默克尔树被用来证明一个子状态是某个状态的一部分[11],这很容易想象出一个场景,某些节点专注于树的跟踪保存,通过插入和查找功能来获得报酬。

    E.2)Light clients(轻客户端):轻客户端不下载整个块。首先,用户给客户端一个他所关注的某个历史区块的哈希值,这种技术也被称为weak subjectivity(弱主观性)[12]。然后,客户端只知道下载包含该哈希的区块,而且只下载区块头。区块头比完整的块小得多; 只需很少的交易处理。 为了简单起见,在第II-A.4章节讨论块结构时,我们没有提到区块头,但区块头包含以下内容:

    上一个块的散列。 所有状态树的根哈希。 E.3)State channels and parallelism(状态通道和并行性):状态通道具有巨大的吞吐量,其内部的大多数交易永远不会在区块链上被执行或保存。另外,通道不会在链上写入任何共享状态,因此所有交易都可以并行处理。 鉴于目前销售的大多数消费类硬件至少有四个处理核心,因此可以提升4倍左右的交易吞吐量。

    此外,从实际情况讲一般不会有复杂的并发交互场景,因此对区块链架构进行分片应该是比较容易的。 由于区块链分片技术仍然是实验性的,因此我们在AE区块链初始设计时不考虑采用任何分片技术。 但是,将来分片技术更新发展后,AE区块链应该是可以最简单的实现分片技术的区块链之一。

    E.4) Transactions per second at a given memory requirement(特定内存的每秒交易量):协议的变量会被共识机制经常的更新,从其初始默认值,我们可以计算出每秒默认的交易数。

    1 Note that this is a draft and will likely
    2 change.
    3
    4 We define the following variables for the
    following calculations:
    5
    6 B = block\_size in bytes
    7 F = blocks\_till\_finality
    8 R = time\_till\_finality in seconds
    9 T = transaction size in bytes
    10
    11 transactions per second = B * F / (T * R)
    12
    13 B = 1000000 bytes = 1 megabyte per block
    14 F = 24*60*2 blocks per day
    15 R / F = 30 seconds per block
    16 R = 24*3600 seconds per day
    17 T = 1000 bytes per transaction
    18
    19 1000000 * 24*60*2 / 1000 / 24*3600
    20 = 1000000 / 1000 / 30
    21 = ca. 32 transactions per second (fast
    enough to sign up every human within 8
    years)
    

    为了操作一个节点,我们需要保留所有块最终状态的副本,并且我们需要把块信息记录100次以上,用以防止发生攻击。 估计2天内,会有5760个块需要写入,因此需要的内存数是5760 * 1MB* 100 = 576000MB= 576GB 当没有发生攻击时,每个节点只需要存储大约5.76GB的块数据。

  • Æternity 区块链白皮书 at 2018年12月13日

    A. Tokens, accounts and blocks(代币、账户和块链)

    虽然智能合约的“无状态”,已经是合约开发者的一种共识,但是AE区块链仍然会对一些预定义的组件保持状态。马上我们将按照每个模块来阐述这些内容。 为了简单起见,本节假设每个节点都记录着整个块链,一些可能的优化在II-E章节中进行描述。

    A.1)Access token, Aeon(使用代币,AE币):使用区块链不是免费的,需要用户花费一个名为aeon(AE币)的代币。AE币可以用于支付平台上任何消耗资源的应用,比如在平台上实现的基础金融应用。存在与创世块中的AE币,将通过以太坊的智能合约来分发,未来AE币将通过挖矿的方式发行。平台中所有的手续费都通过AE币来支付,所有智能合约的流通媒介也是AE币。

    A.2)Accounts(账户):每个账户都包含地址、AE币余额和一个随机数,随机数的生成规则随着每笔交易和块高度而变化。同时每个账户根据开户时间必须要支付一笔小额手续费,创建和保存账户的成本用于防止垃圾数据的无限制膨胀,而删除账户回收空间则可以获得一定的奖励。

    A.3)Name system(域名系统):许多区块链系统的账户地址都是一串哈希值,对用户来说无可读性。借鉴Aaron Swartz的工作和域名币设计,AE的特性之一是拥有一个分布式又安全的域名系统,使得账户可以支持人性化的名字[9]。区块链状态中包含一个唯一性字符串到固定大小字节数组的映射,这些字符串可以用来指向帐户地址或者默克尔树的哈希。

    A.4)Block Contents(块内容):每个块包含以下组件:

    • 上一个块的哈希。
    • 交易的默克尔树。
    • 帐户的默克尔树。
    • 域名的默克尔树。
    • 已开通道的默克尔树。
    • 还没有回答问题的预言机的默克尔树。
    • 预言机答案的默克尔树。
    • 默克尔证明的默克尔树。
    • 随机数发生器当前的熵。

    前一个块的哈希用来维护区块链的有序性,交易树包含了当前块中的所有的交易。 除了共识投票树以外,其他所有的树都在共识机制下:如果一棵树从一个块到下一个块 之间发生了变化,那这个变化必须通过交易打包到一个新的块链交易树中,并且一个默克尔更新证明必须包含在块的证明树中。 剩下三棵树的作用,希望在接下来的章节中能够描述清楚。

    B. State channels(状态通道)

    在最近的区块链发展中,一个最有趣的发现是状态通道,它们在大多数情况下按照基本原则执行,只有人受交易影响时才需要去了解它。 本质上,交易方在块链上实例化一些状态,例如:一个以太坊智能合约或一个比特币多方签名。然后他们在彼此间简单的发送经过签名更新后的状态,关键点在于他们中的任何一个都可以使用这些来更新块链中的状态,虽然在大多数情况下不需要这么做。 这将使得交易各方处理交易的速度可以与信息传输一样快,而不需要等到交易已验证-最终确定-通过区块链共识机制这些流程的执行完成。

    在AE区块链中,唯一需要更新的状态是AE币的转移,并且只有交易方已经存入通道中的AE币才可以被转移。 这使得所有通道彼此独立,其直接好处是任何通道中的交易都可以并行处理,极大的提高了交易吞吐量。

    区块链只用于处理最终交易输出或解决所产生的冲突,这大致类似于司法系统。 不过,因为区块链的行为将是可预测的,对状态通道预期输出结果产生争议是没有益处的;恶意者也没有动力去做不正确的行为,只能在区块链的最终状态上作处理。所有这些综合起来,这将提升几个数量级的交易速度和交易量,而且保证了隐私性。

    B.1) Smart Contracts(智能合约):虽然链上唯一可以保存的状态是AE币的转移,但是AE区块链仍然有一个图灵完备的虚拟机可以运行“智能合约”。 AE区块链上的合约是一种严格的协议,按照一些规则分配资金,与以太坊上的合约相比有一些明显的不同。两个显著的差异是,默认情况下只有双方才知道给定的合约,而且只有双方拥有开放的状态通道时才可以创建有效的合约。如果双方同意合约,他们签名并保留副本以备将来参考,只有当双方对结果产生争议时,才提交到区块链上,在这种情况下,合约代码只作为的交易的一部分保存,而不保存其他任何状态,如果争议的情况发生,区块链会根据合约来重新分配AE币,并且关闭状态通道。

    1 macro Gold f870e8f615b386aad5b953fe089;
    2
    3 Gold oracle
    4 if 0 1000 else 0 0 end
    5 0
    

    示例1:一个简单的合约编码,可以用来对赌黄金价格,编写语言使用的是Chalang类似Forth-like语法,将在第IV-A节中介绍。

    例如,示例1显示了一个非常简单的合约,在一定时间内根据黄金的价格来打赌。 第1行,macro是宏关键字,Gold是宏的名称,后面的哈希值是预言机中问题的唯一标识,问题的内容为在2016年12月1日时如果黄金价格低于38美元/克,则这个宏的返回结果为true。合约的正文在第2-4行显示:我们首先把问题的唯一标识压入栈中,并使用预言机调用它,预言机会把答案放到栈顶部, 我们用这个答案作条件判断:如果预言机返回true,我们把0和1000放到栈中,0表示没有AE币需要被消耗,1000表示通道中有1000个AE币需要被转移给第一个参与方,反过来如果返回false,我们把0和0放到栈中,第二个0表示另一个参与方获得通道中所有的AE币,最后的0表示通道状态的随机值,在实际使用场景中,随机数将在部署时生成。

    一个需要注意的重要事情是AE区块链上的智能合约不维护自己的任何状态,合约状态是由交易方维护,并在合约执行时作为输入。每个合约本质上是个纯函数,根据一些输入参数,输出新的通道状态。 一般在软件开发中,使用纯函数是有益处的,特别是在金融应用的开发过程中,这已在学术界和工业界广泛论证了数十年[10] [need cit.]

    1 : hashlock
    2 swap
    3 hash
    4 == ;
    

    示例2:一个简单的哈希锁

    a)Contract interaction and multi-step contracts(合约交互和多步骤合约):即使所有的合约是无状态的并且互相独立的执行,但仍然可以通过hashlocking(哈希锁)[need cit.]来实现合约之间的交互和状态关系。 一个简单的哈希锁如示例2,第1行,我们定义一个函数称为hashlock,给定一个哈希值h和秘密值s。 在第2行对秘密值s重新赋值,然后在第3行中对秘密值s通过hash(v)函数进行哈希运算,最后在第4行比较运算后的哈希值和原来哈希值h,如果相等,则重新赋值后的秘密值s与原来的值是一致的。通过对该函数秘密值s的控制,可以实现对不同智能合约的执行逻辑进行控制。

    1 macro Commitment a9d7e8023f80ac8928334 ;
    2
    3 Commitment hashlock call
    4 if 0 100 else 0 50 end
    5 1
    

    示例3:哈希锁可以通过中间人来实现AE币的转移

    这个简单的例子显示,哈希锁使得不同用户在状态通道间存在一条路径,即使不共享状态通道,也可以实现AE币的转移。例如,如果Alice和Bob有一条状态通道,Bob和Carol也有一条通道,然后Alice和Carol的交易可以通过Bob来实现, 他们之间通过创建两个合约副本,每个通道一个合约副本来完成交易,见示例3,第1行的宏Commitment表示Alice所选择的秘密值的哈希,在第3行我们把它放到栈中并调用哈希锁函数,第四行条件分支的执行取决于哈希锁函数的返回值,一旦这些合约已经由各方签名,则Alice揭示秘密值,这允许Bob和Carol使用它来执行合约的条件逻辑,从而完成AE币的转移。

    1 macro Commitment a9d7e8023f80ac8928334 ;
    2
    3 Commitment hashlock call
    4 if State33 else State32 end
    5 call
    

    示例4:一个简单的例子,使用哈希锁在通道中玩一个多方参与的游戏

    哈希锁也可以用于在状态通道中实现多方参与的游戏,见示例4,每个人都和游戏管理者建立了一条状态通道,每个通道中都包含了一个相同的智能合约,通过函State32来声明,当前我们处于游戏状态32,以及我们想要同时把所有通道中的游戏状态更新到33。当游戏管理者揭示秘密值时,所有通道中的合约将同时执行更新。

    b)Metered execution(执行计量):智能合约执行时的计量方式类似于以太坊的“gas”,但AE区块链还使用两个与其不同的资源计量,一个时间,一个是空间。 在合约被执行时,这两种资源都需要请求方使用AE币来支付。这种方式可能被认为是不可取的,因为一开始有可能是交易的另一方需要用区块链来解决争议。 但是,只要通道中的钱不都是用于投注,这个问题可以在合约代码中有效地规避,因为可以把资金从一方重新分配给另一方。 从最佳实践上来说,应该避免把所有资金放在一个通道中交易,因为它不利于同另一方交易失败后的通道关闭。

    B.2) 示例:让我们将所有这些想法落地。

    实际上,如果Alice和Bob想在AE区块链上使用状态通道交易,他们将通过如下过程:

    1) Alice和Bob签名一笔交易,指定每个人存放多少资金存放到状态通道中,并将其发布到区块链上。

    2) 一旦区块链打开通道,他们都可以在通道上创建新的状态,并互相发送和签名新的状态。 通道的状态可以是资金在通道中的重新分配,也可以是一个合约用于决定资金新的分配。每个通道的状态都会生成一个随机数,并由参与方签名,因此如果发生争议,一个最新的合法状态将被提交到区块链并强制执行。

    3) 通道可以有两种不同的方式关闭:

    a) 如果Alice和Bob确定他们已完成交易并达成最终的一致,他们需要同时签名并展示,然后提交到区块链,这将把通道中的资金按约定分配并关闭通道。

    b) 如果Alice因为一些原因拒绝签名关闭交易,那么Bob可以把双方最新一个已签名的状态提交到区块链用于关闭通道,这将开始一个倒计时,如果Alice认为Bob是不诚实的(其提交的状态不是最新的或者有问题),她有机会在倒计时结束之前,把一个双方签名的拥有更高随机数的状态提交到区块链, 如果她这样做的话,通道将立即关闭,否则等倒计时结束后关闭。

    C. Consensus mechanism(共识机制)

    AE区块链使用Proof-of-Work和Proof-of-Stake混合共识机制。 块链的顺序性将由Proof-of-Work决定,某些系统变量将由链上的预测市场系统确定,这允许用户参与并引入他们的知识。 对于PoW算法,目前我们倾向于一种Tromp’s Cuckoo Cycle(布谷鸟循环)算法的变种,其是基于内存限制的“间接式工作量证明”,因为它只需较少的电力就可以运行,但具有其他一些限制因素,其中之一是内存延迟可用性,这种算法使得在智能手机上挖矿变得可行。

    Tromp写道:

    “[布谷鸟循环]是一种即时可验证的基于内存限制的PoW算法,它的独特之处在于延迟而不是计算。 在这个意义上说,基于布谷鸟循环的挖矿是一种ASIC开采的形式,应用在DRAM芯片上随机读写数十亿位,甚至当手机整夜充电时挖矿也不会有太多数量级的效率损失,这种不以盈利为目的碰运气的挖矿方式,使得挖矿设备的扩张前景将会非常巨大,这益于挖矿的分散化。“

    预览:共识机制在AE区块链中还有一些非常规作用, 除了确认新的块以为,它也确认预言机的问题和系统参数值,特别是共识机制本身也是可以改变的。但是,应该指出的是,这并不是完全没有问题。例如,如果一个简单的工作量证明机制被使用,贿赂矿工破坏预言机将会变得低成本。 因此,AE区块链将使用工作量证明和权益证明混合算法,平衡利用两者的好处。 独立于此,PoW将被用于发行新产生的AE币。

    备注:最初的意图是使用100%的权益证明算法,但是我们认为100%的PoS系统是不可能实现的。

    C.1)Oracles(预言机):这是大多数智能合约的一个关键特性,不管是以为文本还是代码形式描述,都要有能力从环境中带入价值,例如不同物品的价格或者一个特定的事件是否会发生,一个智能合约系统如果没有这种能力,本质上是个封闭的系统,可以说没有太大的用处。 这是个普遍接受的事实,并且已经有几个项目尝试将外部数据以分布式的方式带入区块链中[8]。 然而,要确定其是否可行,本质上需要在底层共识机制上面再实现一个新的共识机制。

    在区块链上同时运行两个共识机制和把它们分开单独运行一样昂贵。 此外,这增加了不安全性,因为最不安全的那个将被攻击并产生“错误”值。 因此,我们建议将两个共识机制合并成一个,本质上用来确认系统状态的共识机制,也可以用来确认外部世界的状态。

    这种方式通过如下工作。 任何AE币持有者都可以通过提交一个回答yes或no的问题来启动一个预言机,当这么做时,也需要指定回答这个问题的时间区间,可以是从现在开始,或者将来的某个时间。 启动预言机的用户需要在这个时间区间内按比例存放一定数量的AE币作为押金,如果有用户提交了正确可接受的答案,那么押金将会被归还,否则将会被消耗掉。区块链将为预言机生成一个唯一标识符,当它一旦可用时,可以被用来检索答案。

    一旦到了需要回答问题的时间,启动预言机的用户可以免费提供一个答案。在启动预言机的用户提供了一个答案或者直到一段时间过去后,任何其他用户可以通过提交相同数量的AE币作为押金来提出反诉,如果时间到期后没有用户提出反诉,那么启动预言机用户所提供的答案将被接受,押金将归还。 如果有任何反诉被提出的话,区块链的共识机制将回答预言机的答案,这个代价会比较高,但是由于我们至少可以获得其中一笔押金,因此我们可以这么使用。

    D. Governance(治理)

    在过去基于区块链的系统治理一直是个很大的问题,每次系统升级都需要硬分叉,这通常会导致利益持有人之间大量的讨论,甚至在源代码中修正变量这种简单的事情。我们已经看到了涉及比特币块大小的争论,当用户的激励措施与决策制定者不一致时,统一意见变得非常困难,而且也没有明确的升级路径。我们也看到了更为复杂的治理决策,比如修复“The DAO”智能合约中的bug,这需要系统开发人员快速的干预。

    这些系统的主要问题容易被识别 - 协议升级或更新的决策制定过程定义不明确且缺乏透明度。AE区块链的治理机制是共识的一部分,它使用预测市场来尽可能的达成效率性和透明性。

    此外,共识机制由多个变量来定义,这些变量决定了系统的功能是什么样的以及如何被每个新块轻量化的升级,这些变量涉及从交易或者询问预言机花费的成本到修改基本参数的值,如出块时间。

    通过预测市场对协议中定义的变量进行分析,用户可以学习到如何有效地改进协议。 通过预测市场对潜在的硬分叉进行分析,我们可以帮助社区达成共识,使用哪个版本的代码。每个用户为自己衡量选择最优的方式,这是种简单的默认策略,将最大化其持有的价值。

    E. Scalability(扩展性)

    E.1)Sharding trees(分片树):到目前为止提出的架构是高度可扩展的,即使每个用户只保存其关心的一部分块链状态,而忽略其他用户的数据,也可以使区块链正常运行起来。新用户需要至少一个状态副本来确定他们关心的子状态,但是我们可以在任意多个节点上分割这些数据,使得每个节点的负载都尽量的小。默克尔树被用来证明一个子状态是某个状态的一部分[11],这很容易想象出一个场景,某些节点专注于树的跟踪保存,通过插入和查找功能来获得报酬。

    E.2)Light clients(轻客户端):轻客户端不下载整个块。首先,用户给客户端一个他所关注的某个历史区块的哈希值,这种技术也被称为weak subjectivity(弱主观性)[12]。然后,客户端只知道下载包含该哈希的区块,而且只下载区块头。区块头比完整的块小得多; 只需很少的交易处理。 为了简单起见,在第II-A.4章节讨论块结构时,我们没有提到区块头,但区块头包含以下内容:

    上一个块的散列。 所有状态树的根哈希。 E.3)State channels and parallelism(状态通道和并行性):状态通道具有巨大的吞吐量,其内部的大多数交易永远不会在区块链上被执行或保存。另外,通道不会在链上写入任何共享状态,因此所有交易都可以并行处理。 鉴于目前销售的大多数消费类硬件至少有四个处理核心,因此可以提升4倍左右的交易吞吐量。

    此外,从实际情况讲一般不会有复杂的并发交互场景,因此对区块链架构进行分片应该是比较容易的。 由于区块链分片技术仍然是实验性的,因此我们在AE区块链初始设计时不考虑采用任何分片技术。 但是,将来分片技术更新发展后,AE区块链应该是可以最简单的实现分片技术的区块链之一。

    E.4) Transactions per second at a given memory requirement(特定内存的每秒交易量):协议的变量会被共识机制经常的更新,从其初始默认值,我们可以计算出每秒默认的交易数。

    1 Note that this is a draft and will likely
    2 change.
    3
    4 We define the following variables for the
    following calculations:
    5
    6 B = block\_size in bytes
    7 F = blocks\_till\_finality
    8 R = time\_till\_finality in seconds
    9 T = transaction size in bytes
    10
    11 transactions per second = B * F / (T * R)
    12
    13 B = 1000000 bytes = 1 megabyte per block
    14 F = 24*60*2 blocks per day
    15 R / F = 30 seconds per block
    16 R = 24*3600 seconds per day
    17 T = 1000 bytes per transaction
    18
    19 1000000 * 24*60*2 / 1000 / 24*3600
    20 = 1000000 / 1000 / 30
    21 = ca. 32 transactions per second (fast
    enough to sign up every human within 8
    years)
    

    为了操作一个节点,我们需要保留所有块最终状态的副本,并且我们需要把块信息记录100次以上,用以防止发生攻击。 估计2天内,会有5760个块需要写入,因此需要的内存数是5760 * 1MB* 100 = 576000MB= 576GB 当没有发生攻击时,每个节点只需要存储大约5.76GB的块数据。

  • 非常同意!

    理财就是个坑,谁用谁知道!!!

  • HX FAQ at 2018年11月21日

    欢迎质押给citizen god:

    • god 出块是全网最稳定的citizen(之一);
    • 矿池手续费3%,童叟无欺,只会降低,绝不提高!
  • HX citizen 竞争出块的规则 at 2018年11月21日

    欢迎质押给citizen god:

    • god 出块是全网最稳定的citizen(之一);
    • 矿池手续费3%,童叟无欺,只会降低,绝不提高!
  • 欢迎质押给citizen god:

    • god 出块是全网最稳定的citizen(之一);
    • 矿池手续费3%,童叟无欺,只会降低,绝不提高!