精华内容
下载资源
问答
  • Algorand

    2019-11-11 00:38:47
    Algorand是权益证明(POS)的一个升级,彻底消除区块链分叉的可能性,可以在一小段时间内确认交易,Algorand的核心使用称为BA⋆的拜占庭协议,同时扩展到许多用户。即使一些用户是恶意的,网络被临时分区,Algorand也...

     

    Algorand是权益证明(POS)的一个升级,彻底消除区块链分叉的可能性,可以在一小段时间内确认交易,Algorand的核心使用称为BA⋆的拜占庭协议,同时扩展到许多用户。即使一些用户是恶意的,网络被临时分区,Algorand也确保用户从未对已确认的交易有不同意见。在Algorand的BA⋆协议中,除了私钥之外,用户不会保留任何私有状态。

     

    两种共识:

     

    最终共识: BA⋆()将不会在这一轮的任何其他块达成共识。

    暂定共识:其他用户可能已经在不同的块上达成了暂定共识(只要没有用户达成最终的共识)。

     

    这个算法每一轮的总流程,分为两个大部分——块提议和BA⋆。块提议中首先在普通用户中通过加密抽签选择出这一轮的委员会成员(委员会成员会在每一轮通讯进行替换),然后在委员会成员中再次通过加密抽签选择出这一轮的提议者,每个提议者提议一个块。然后连同哈希和证明(一种随机号码,数字签名可以很容易对其进行验证)一起传播到网络上。之后,这一轮的所有委员会成员接到消息后,通过BA⋆协议对块达成共识(暂定或最终共识)。如果这一轮是暂定共识,则只有在当后续块(后几轮的块)有达成最终共识的情况下才能确认前几轮的暂定共识块。

    加密抽签。用来创建和验证区块链(如若是在一个拥有数百万用户的系统中,那么参与者的数量可能达到数千人)。这种抽签的方法基于前一个区块,选择过程是自动并且完全随机的。用户被选中的概率基于他的权重。关键技术是使用可验证的随机函数(VRFs),以私人和非交互方式随机选择用户。允许用户私下检查是否被选择参与拜占庭协议。

    每个用户在每一轮都要进行加密抽签。在输入字符串(种子+角色)上,VRFsk返回两个值:散列和证明。然后用为该角色选择的用户的预期数量τ除上所有用户的权重和,得到一个概率p。j参数表示此用户被选择了多少次。 被选择j次意味着用户以j个不同的“子用户”的身份参与。一开始j初始化为0,然后循环确定此用户的多少子用户被选择,抽签算法将区间[0,1)划分为连续区间的形式,如果hash / 2hashlen(其中hashlen是散列的比特长度)属于间隔,则用户恰好具有j个选定的子用户。

    要进行加密抽签就要先获得本轮的种子seed。每一轮都会产生一个新的种子。假设现在为第r轮,在r轮的块提议期间,通过这个公式,为第r+1轮块提议计算种子seed r+1。这个种子(和相应的VRF证明π)被包含在每个提出的块中,所以一旦Algorand在r轮的块上达成一致,在r+1轮开始时,每个人都知道seed r+1。 如果块不包含有效的种子(例如,因为该块是由恶意用户提出的并且包括无效的交易),则用户将整个提出的块看作是空的,并且使用这个公式来计算第r轮的相关种子。引导种子选择的seed0的值可以在算法一开始时通过初始参与者(在声明他们的公钥之后)用分布式随机数随机选择生成。

    由第一个公式可知,在选择第r+1轮的种子之前要选择每个用户的密钥sk u(r轮使用的)。

    块提议。抽签确保随机选择一小部分用户,并通过其权重为每个所选用户提供优先级,可以在用户之间进行比较。由于抽签是随机的,所以可能会有多个子用户选择提出块,用户通过比较子用户优先级,采用有最高优先级的子用户的那个块,子用户的最高优先级是块的优先级。 然后用户通过网络传播这个块,以及其优先级和证明。其他用户等待一定的时间来接收块。如果用户没有收到块提议,则会用空白块初始化BA⋆。

     

     

    拜占庭协议BA⋆:确保区块链不会分叉。块提议不保证所有用户都收到相同的块。为了在一个单独的块上达成共识,Algorand使用BA⋆。每个用户使用他们接收的最高优先级块初始化BA⋆。

    BA⋆的执行由两个阶段组成。第一阶段,将在任意一个块的散列上达成一致的问题转换为在两个值达成一致,这两个值是特定建议的块散列,或者是空块的散列。 程序里是用Reduction这个函数。在第二阶段,BA⋆就这些选择之一达成一致:要么同意一个建议的区块,要么同意一个空的区块。程序里是用BinaryBA⋆这个函数。

    首先Reduction这个函数,主要分为两步,step1,每个委员会成员对由BA⋆ main函数传递给Reduction()的块的散列进行投票。Step2,委员会成员对第一步至少得到T·τ票的散列进行投票,或者如果没有散列得到足够的票数,则默认空块的散列。 Reduce()确保至多有一个非空块可以被Reduce()返回给所有诚实用户。

    这里的投票是有两个主要函数——发送选票和计票。

    发送选票函数,检查在给定的轮和步骤中用户是否被选择为委员会成员,这一步用之前的加密抽签函数实现。如果被选中,则用户就会传播一个包含值(要投给的块的哈希)的签名消息传递。

    计票函数,从这个缓冲区中读取属于当前轮和步骤的消息。它通过调用每个消息的这个函数来处理投票, 这个函数是用来确保投票的有效性的,它不仅返回消息中包含的值,还返回与该值关联的投票数。在计票函数while循环里,只要一个值超过T·τ票,就会返回该值。如果在分配的λ时间窗口内没有收到足够的消息,则会产生超时并返回TIMEOUT。

    第二阶段,BinaryBA⋆这个函数。前面说了,是二选一。每个委员会成员都为一个值投了一票,所有的用户都对票数进行统计。在BinaryBA⋆()的每个步骤中,如果一个用户看到了某个值超过了T·τ票,那么在下一步中将投票给相同的值。 然而,如果没有任何值获得足够的选票,BinaryBA⋆()选择下一个投票。

    在一般情况下,当网络强同步且块提议者是诚实时,BinaryBA⋆()将为大多数用户启动相同的block_hash,并将在第一步达成共识,因为大多数委员会成员为相同 block_hash值投票。程序里有显示。

    如果网络不是强同步的,BinaryBA⋆()可能在两个不同的块上返回共识。【例如,假设在BinaryBA⋆()的第一步中,所有的用户投票给block_hash,但是只有一个诚实的用户A接收这些投票。 在这种情况下,A将在block_hash上返回共识,但所有其他用户将转到下一步。 现在,其他用户再次给block_hash投票,因为CountVotes()返回TIMEOUT。 但是,让我们假设网络将所有这些投票放弃。 最后,用户在第三步给投票empty_hash,网络表现良好,所有投票都被传递。 因此,用户将继续投票给empty_hash,直到下一个迭代循环,此时他们在empty_hash上达成共识。】通过引入最终和暂定共识的概念来解决这个问题。BA⋆算法main函数最后是判断建立的是最终共识还是暂定共识。

     

     

    其他参考:https://zhuanlan.zhihu.com/p/29429006

    展开全文
  • algorand论文

    2018-09-16 11:50:57
    Algorand是权益证明(POS)的一个升级,彻底消除区块链分叉的可能性,可以在一小段时间内确认交易,Algorand的核心使用称为BA⋆的拜占庭协议,同时扩展到许多用户。即使一些用户是恶意的,网络被临时分区,Algorand也...
  • algorand-rs旨在成为一个生锈的algorand sdk。 use algorand_rs :: algod :: Algod; fn main () -> Result <(), Box < dyn>> { let algod = Algod :: new () . bind ( "http://localhost:4001" ) . auth ( ...
  • Algorand VS代码扩展 这是的VS Code扩展。 如何使用 先决条件 (此扩展使用docker运行Algorand节点和Algorand编译器) 安装 从VS Code Marketplace 。 您还可以从下载预发行版本,并通过VS Code /扩展/从VSIX安装.....
  • py-algorand-sdk 用于与Algorand网络交互的python库。 安装 运行$ pip3 install py-algorand-sdk来安装软件包。 或者,选择一个,然后运行$ pip3 install [file name] 。 SDK开发 使用make docker-test运行make ...
  • 算法构建器模板 Algorand Builder的Dapps模板
  • PHP Algorand SDK(算法,kmd和索引器) 一个用于与Algorand网络交互PHP库。...$ ./algorand-indexer daemon -h -d data 克隆存储库后,您需要包括php-algorand-sdk : require_once 'sdk/algorand.php' ;
  • Algorand区块链提供了一种去中心化,可扩展且安全的协议,使其成为共享信息的出色媒介,但是,Algorand交易的当前最大票据大小为1KB,从而限制了所传输数据的数量。 大文件无法有效地存储在区块链上。 一方面,...
  • Algorand Studio是用于为开发的 。 它包括代码编辑器和编译器, 集成,Algorand节点,密钥对管理器和块浏览器。 IDE还可以帮助构建Algorand事务,包括,多签名事务, 创建/转移/以及 和合同执行。 安装 下载 中提供...
  • docker run -d -p 4243:3048 --env ALGORAND_DATA=/var/lib/algorand --volume algorand_volume:/var/lib/algorand vraidsys/algorand-participation:1.0.0 启动容器化的 Algorand 节点: 验证容器化的 Algorand ...
  • Algorand是一个公共区块链和协议,旨在为所有参与者提供去中心化,规模化和安全性。 他们的PURE PROOF OF STAKE:trade_mark:共识机制可确保在真正分散的网络中充分参与,提供保护并提高速度。 区块在几秒钟内完成,...
  • Algorand Wallet-crx插件

    2021-04-06 19:17:28
    使用Algorand Wallet,您可以从桌面浏览器访问Algorand网络。 ly安全地发送和接收ALGO:handshake:连接到… 使用Algorand Wallet,您可以从桌面浏览器访问Algorand网络。 :locked_with_key:安全地发送和接收ALGO:...
  • 此shellscript为您提供了在macOS上启动和运行Algorand节点的最简单方法之一。 它推断出设置文件权限,下载正确的脚本以及运行这些脚本的一些复杂性,并允许您仅运行一个命令( ./quickstart/sh )并开始使用Algorand...
  • Swift Algorand SDK 这是一个快速的SDK,允许与algorand区块链进行交互。 它还支持与V2索引器和Algo Apis相交 1如何安装 在Xcode中,转到“文件”>“ Swift程序包”>“添加程序包依赖性”,然后粘贴该程序包的git ...
  • Algorand简介

    千次阅读 2018-10-17 21:43:21
    amp;amp;isappinstalled=0 ...2018年2月,图灵奖得主、MIT教授Sivio Micali募集400万美元开发Algorand区块链协议一事受到了国内外媒体的普遍关注。2017年春天,笔者有幸在MIT选修了Micali教授和MIT媒体实...

    原文地址:http://www.360doc7.net/wxarticlenew/738011615.html?from=singlemessage&isappinstalled=0

    2018年2月,图灵奖得主、MIT教授Sivio Micali募集400万美元开发Algorand区块链协议一事受到了国内外媒体的普遍关注。2017年春天,笔者有幸在MIT选修了Micali教授和MIT媒体实验室数字货币计划负责人Neha Narula合开的《共享公共账本》(Shared Public Ledger)课程。这门课主要就是讲解Algorand。Algorand的目标是建立一个低能耗、高速度、民主化、可拓展性好而且几乎不会出现分叉的分布式账本。Algorand没有引入激励机制或发行数字加密货币。

    Algorand代表了区块链底层技术发展的一个重要方向。本文对Algorand做一个简单介绍,分享给国内读者。Algorand涉及非常复杂的数学,笔者力图用最少的数学介绍Algorand最核心的想法(涉及数学的主要是本文第三、四节,略过不读不会影响对文章大意的理解)。对Algorand感兴趣的读者可以阅读关于Algorand的工作论文(不是白皮书,最新版工作论文于2017年5月发布,下载地址是https://arxiv.org/abs/1607.01341)。本文不构成对Algorand的商业评论。当然,笔者衷心祝愿Micali教授能取得成功。

    一、Algorand的发展背景

    Algorand是MIT机械工程与计算机科学系Silvio Micali教授与合作者(主要是纽约大学石溪分校陈静副教授)于2016年提出的一个区块链协议。Micali教授为意大利裔美国人,1982年获加州大学伯克利分校计算机科学博士,1983年起在MIT任教。他的研究领域包括密码学、零知识(zero knowledge)、伪随机数生成、安全协议(secure protocol)和机制设计。Micali教授1993年获哥德尔奖(由欧洲理论计算机学会EATCS与美国计算机学会基础理论专业组织ACM SIGACT于1993年共同设立,颁发给理论计算机领域最杰出的学术论文),2004年获密码学领域的RSA奖(RSA是三位发明公钥-私钥密码系统的科学家Rivest、Shamir和Adleman的姓氏缩写),2012年获图灵奖(由计算机协会ACM于1966年设立,奖励给对计算机事业作出重要贡献的个人,有“计算机界诺贝尔奖”之称)。

    Algorand由algorithm(算法)和random(随机)两个词合成,顾名思义,就是基于随机算法的公共账本协议(public ledger)。Algorand针对比特币区块链系统的几个核心缺陷进行了改进。

    第一,比特币区块链系统的工作量证明共识机制需要消耗大量计算资源和能源。根据Digiconomist网站数据,截至2018年1月底,每产生一个比特币区块,需要运行 次哈希运算。考虑到哈希函数作为随机预言(random oracle)的性质,比特币区块的产生过程,相当于掷一个有面的骰子,直到掷出某一特定的面为止。比特币区块链系统一年的耗电量,与秘鲁全国一年的耗电量相当,而且还在快速增长中。这些巨量计算和耗电,除了产生比特币区块以外,对人类社会几乎没有任何价值。

    第二,比特币区块链系统要长期存续,要求50%以上的计算资源掌握在诚实用户的手中。否则,恶意用户在力量占优时可能篡改区块链。但随着市场演变(中本聪应该没有预见到这种情况),比特币区块链系统中的计算资源集中在少数几个“矿池”中。这就构成了一个潜在的不稳定因素。“矿池”的存在也使比特币区块链系统偏离了其早期宣称的民主特征,形成了“矿工”和普通使用者这样不同阶层的使用者。从比特币历史上关于扩容的讨论以及多次分叉不难看出,比特币区块链系统已经形成了中心化程度很高的社区结构。

    第三,比特币区块链系统容易出现分叉。根据中本聪的白皮书[Nakomoto, Satoshi, 2009, “Bitcoin: A Peer-to-Peer Electronic Cash System”.],当一笔交易被记入一个区块并接入区块链后,要等该笔交易所在区块后面再接上5个区块,才能比较肯定这笔交易进入比特币的公共账本,而非在某一个分叉上。因为比特币区块链系统平均每10分钟才能产生一个区块,一笔交易从被记入区块到被确认需要1个小时左右时间。

    第四,比特币区块链系统的可拓展性比较差。比如,一个比特币区块的大小为1M,大约能容纳2000笔左右交易,因为平均每10分钟产生一个区块,比特币平均每秒钟能支持3-4笔交易;相比而言,Paypal平均每秒钟能支持193笔交易,Visa平均每秒钟能支持1667笔交易[http://www.altcointoday.com/bitcoin-ethereum-vs-visa-paypal-transactions-per-second/ ]。从这个意义上讲,比特币是人类历史上投入产出比最低的社会和技术试验之一。对可拓展性问题,比特币闪电网络是目前很受关注的一个解决方案。

    鉴于比特币区块链系统的上述缺陷,Algorand的目标是:
    1.能耗低,不管系统中有多用户,大约每1500名用户中只有1名会被系统挑中执行长达几秒钟的计算。
    2.民主化,不会出现类似比特币区块链系统的“矿工”群体。
    3.出现分叉的概率低于一兆分之一(即)。假设Algorand中平均每分钟产生一个区块(后文会给出有关测试数据),这个概率意味着平均每190万年出现一次分叉。
    4.可拓展性好。

    二、Algorand的基本设置

    用户和交易特征

    Algorand是一个公有链系统。用户(或者节点)加入Algorand不需要事先申请,可以随时加入。Algorand对用户数量也没有任何限制。每个用户持有多个公钥。每个公钥均是一个电子签名机制的一部分,也就是有一个与之对应的私钥。每个公钥对应着一定数量的货币。每笔交易实际上是一个电子签名,该电子签名将一定数量的货币从某一个公钥转移给另一个公钥,并用前一个公钥对应的私钥进行加密。不难看出,Algorand的这些设计,与比特币是一样的。

    Algorand要求系统中2/3的货币由诚实用户掌握。诚实用户的含义是:其行为遵守有关指引(主要指拜占庭共识协议,见下文),并且能完美地发送和接收消息。诚实用户以外的是恶意用户,恶意用户的行为可以任意偏离有关指引。

    对恶意用户,Algorand假设他们由一个“敌对者”(adversary)控制。“敌对者”能发起强大攻击,包括:
    1.“敌对者”可以在任何时候瞬间地腐化任何他选中的用户,使其成为恶意用户(哪怕该用户之前是诚实用户)。
    2.“敌对者”完全控制并且完美协调所有恶意用户。可以理解为,恶意用户的行为(包括发送和接收消息)完全由“敌对者”代理。
    3.“敌对者”控制所有信息发送,但必须满足一点:诚实用户发出的消息能在一定时间内(该时间只与信息的存储大小有关)抵达95%的诚实用户。然而,“敌对者”几乎不可能伪造诚实用户的电子签名或者干涉诚实用户之间的通讯。

    区块链结构

    在Algorand中,与交易有关的信息均存储在一系列区块中。每个区块主要包括:
    1.从上一个区块以来的交易信息;
    2.一个哈希指针,相当于对所有前序区块所含信息的一个摘要或浓缩;
    3.当期“领导者”电子签名后的“种子”参数(细节见后文)。
    这样,这一系列区块通过这些哈希指针连接在一起,构成了区块链。如果某一区块的信息被“敌对者”篡改,其与后序区块中保存的哈希指针就会出现不匹配。这就使得区块链难以被篡改。

    Algorand的上述设计与比特币区块链系统基本相同,但存在一个关键差别。目前,Algorand是一个单纯的分布式账本协议,没有引入激励机制,没有发行类似比特币的数字加密货币。Algorand中交易所用的货币是外生给定的(可以是任何法定货币或数字加密货币),交易只影响货币在不同用户之间的分配。而在比特币区块链系统中,“矿工”构建了被公共账本接受的区块后,就会得到系统给予的一定数量的比特币作为奖励。

    网络通讯

    与比特币区块链系统一样,Algorand假设用户之间的通讯采取“点对点传言”模式(peer-to-peer gossip):当某一用户传播一条消息后,第一次收到这条消息的用户随机并且独立地选择他的一些“邻居”,并将消息传给“邻居”们。当没有用户是第一次收到这条消息时,这条消息的传播就终止了。

    Algorand对网络通讯的要求是:对任意大于95%的可及性参数(reachability)ρ和消息的存储大小参数μ,总存在一个时间参数λ(λ只与ρ和μ有关),使得一个诚实用户发出的存储大小为μ的消息,在经过λ长时间后,至少被超过ρ的诚实用户接收。

    共识机制

    Algorand中,用户(不是全部用户,仅指被系统随机挑中作为“验证者”的用户,详见下文)通过一个拜占庭协议(由Micali教授开发,称为BA★)对新区块达成共识。BA★执行起来非常快。大致言之,BA★每次循环有3个子步骤,在每次循环后均有1/3以上的概率能达成共识。一旦“验证者”对某一个新区块达成共识,超过一半的“验证者”再用自己的私钥对该区块进行电子签名(相当于认证),该区块就开始在Algorand网络中传播。

    BA★的一个重要特征是:在点对点网络通讯下,BA★的参与者可更换(player-replaceable)。也就是,BA★每次循环的每一个子步骤均可由全新的、独立随机选择的参与者来执行。在这种情况下,BA★仍能正确、有效地达成共识。假设有上百万的用户,BA★每次循环的每一个子步骤的参与者可以完全不一样,而且每一批参与者都无法确定下一批参与者是谁,从而无法串谋。

    密码抽签(cryptographic sortition)

    密码抽签是Algorand的关键创新,也是其得名的由来,其要点如下。首先,Algorand创建并不断更新一个独立参数,称为“种子”。“种子”参数不仅不可能被“敌对者”预测,也不能被其操纵。

    其次,在BA★每次循环中,Algorand基于当前 “种子”参数构建并公布一个随机算法(也被称为“可验证的随机函数”或verifiable random functions,见下文)。该随机算法中的一个关键参数是用户的私钥,这个私钥只有用户本人才知道。

    接着,每个用户使用自己的私钥运行系统公布的随机算法,得到自己的凭证(credential)。凭证值满足一定条件的用户就是这一轮的“验证者”(verifiers)。“验证者”组装一个新区块并连同自己的凭证一起对外发出。其中,在第一个子步骤中凭证值最小(按字典方面排序,见下)的那个“验证者”的地位比较特殊,称为“领导者”。

    最后,所有“验证者”基于“领导者”组装的新区块运行拜占庭协议BA★。在BA★的每次循环中的每一个子步骤中,被选中的“验证者”都是不同的。这样能有效防止验证权力集中在某些用户手中,避免“敌对者”通过腐化这些用户来攻击区块链。

    从上述过程可以看出,第一,“验证者”在秘密情况下获知自己被选中,但他们只有公布凭证才能证明自己的“验证者”资格。尽管“敌对者”可以瞬间腐化身份公开的“验证者”,但已不能篡改或撤回他们已经对外发出的消息。第二,所有“验证者”公布自己的凭证并进行比较后,才能确定谁是“领导者”,也就是“领导者”可以视为由公共选举产生。第三,随机算法的性质决定了,事先很难判断谁将被选为“验证者”。因此,“验证者”的选择过程很难被操纵或预测。第四,尽管“敌对者”有可能事先安插一些交易来影响当前公共账本,但因为“种子”参数的存在,他仍然不可能通过影响“验证者”(特别是其中的“领导者”)的选择来攻击Algorand。接下来,对密码抽签和拜占庭协议BA★做一个相对技术化的介绍。

    三、Algorand的密码抽签

    密码抽签按两条线索执行:一是选出“验证者”和“领导者”;二是创建并不断完善“种子”参数。
    在这里插入图片描述
    在这里插入图片描述

    四、Algorand的拜占庭协议BA★

    拜占庭协议BA★相当于一个两阶段的投票机制。第一阶段,“验证者”对其收到的候选区块(为控制通讯成本,实际上用的是候选区块的哈希摘要)运行分级共识协议(graded consensus),选出“验证者”共识最多的候选区块。第二阶段,“验证者”对第一阶段选出的候选区块,运行二元拜占庭协议(binary Byzantine Agreement),即要么接受它,要么接受空区块。需要强调的,在每一阶段中的每一个子步骤,Algorand可能使用完全不同的“验证者”。
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

    五、Algorand的测试情况

    MIT计算机科学和人工智能实验室对Algorand进行了模拟测试[ Gilad, Yossi, Rotem Hemo, Silvio Micali, Georgios Vlachos, and Nickolai Zeldovich, 2017, “Algorand: Scaling Byzantine Agreements for Cryptocurrencies”. 本节引用的图均来自这篇文章。]。他们的测试在亚马逊云上进行,使用了1000台EC2虚拟机,发现:
    第一,Algorand能在1分钟内确认交易,而且确认交易的时间随着用户数量的增加,变化不大。
    在这里插入图片描述
    第二,将用户数固定在5万,测试不同区块大小对通量(throughput,可以用产生一个区块的平均耗时来衡量)的影响。可以看出,区块越大,构建区块的耗时越长,但对拜占庭协议BA★的运行时间影响不大。
    在这里插入图片描述

    展开全文
  • java-algorand-sdk AlgoSDK 是一个 Java 库,用于与 Algorand 网络进行通信和交互。 它包含一个用于通过网络访问algod实例的 REST 客户端,还公开了用于生成密钥对、助记符、创建交易、签署交易和跨网络序列化数据的...
  • Algorand 系列一:VRF 密码学抽签原理及其在 Algorand 中的应用 ...目前,随着Algorand项目的主网上线,该技术也开始了接受大规模的正式实践检验,我们拭目以待。 目前虽然国内已经有大量文章对VRF技...

    Algorand 系列一:VRF 密码学抽签原理及其在 Algorand 中的应用

    本文来自 Darlzan@YOUChainResarch

    1 VRF介绍

    随着Algorand项目的发起,原来越多的人对其所应用到的密码学抽签技术产生了兴趣并探索相关的应用。目前,随着Algorand项目的主网上线,该技术也开始了接受大规模的正式实践检验,我们拭目以待。

    目前虽然国内已经有大量文章对VRF技术进行了一些介绍,但是目前看都不够全面深入。因此我们「YOUChainResarch」打算重新梳理,希望能尽可能全面地介绍该技术,作为我们「Algorand 技术解析系列」系列文章的开篇,与大家分享及交流探讨。

    1.1 简介

    VRF全称为 Verifiable Random Functions,翻译为“可验证随机函数”,由Silvio Micali,Michael Rabiny,Salil Vadhan于1999年提出,是一种基于公私钥的密码学哈希函数。(关注过Algorand的人一眼就可以看出来,第一作者正是Algorand创始人Silvio Micali)。只有拥有VRF私钥才能计算哈希,但任何拥有对应公钥的人都可以验证该哈希的正确性。

    VRF的一个关键应用就是,提供对存储在基于散列的数据结构中的数据的隐私保护,防止离线枚举(例如字典攻击)。在这种应用中,证明人持有VRF私钥,并使用VRF哈希在输入数据上构造基于散列的数据结构。由于VRF的性质,只有证明人才能回答关于数据结构中是否存储了某些数据的查询。任何知道VRF公钥的人都可以验证证明人正确地回答了查询。但是,不能对数据结构中存储的数据进行脱机推断(即不查询验证器的推断)。

    简单来说,可验证随机函数可以基于私钥 对一个输入,产生一个唯一的固定长度的输出,以及一个对应的证明。其他人在知道了公钥、输出、证明 之后就一定能验证这三者的正确性,并且也只有在知道了这三者之后才能验证其正确性。

    上面提及的这个过程以及相关的数据,是符合若干安全特性的,接下来会具体描述。

    在VRF论文发出来后,到目前已有不同的团队(个人、组织、机构)做出了不同的实现。而IETF(Internet Engineering Task Force)目前正在为VRF的实现制定标准,目前还处于草案阶段,并于 2019-2-8已发布第四版草案。链接见文后参考部分。

    1.2 基本算法表述

    从一个概要逻辑来说,VRF总共涉及到几个相关函数,联合起来完成一个证明和验证的闭环。

    首先简单定义一下标识符:

    • SK:VRF的私钥

    • PK:VRF的公钥

    • alpha: VRF的输入,将对其进行哈希

    • beta: VRF哈希输出

    • pi: VRF证明

    • Prover: 持有VRF公私钥的人就可以称为证明人

    • Verifier: 只持有VRF公钥的人,可以称为验证人

    VRF的基本算法,是很简单清晰的,如下:

      1. 前提是有一个,来生成VRF需要用到的公私钥对;

      2. 证明人计算输入的哈希:; > 注意,VRF_hash算法是确定性的,对于相同的私钥及相同的输入,必定生成一个相同的输出。

      3. 证明人还需要用私钥及输入计算一个证明:

      4. 验证人通过对应的公钥可以验证结果的正确性:

      实际实现中,上面2和3可以放在一起,得到如  这样的函数。

    1.3 所需满足的安全特性

    基于上一节的内容,还不能理解VRF的本质。如果不考虑相关的安全特性,那上面的实现是没有意义的。那么,VRF需要满足哪些安全特性呢?

    总结起来,主要包括3种安全特性:唯一、防碰撞、伪随机。另外,对于IETF的实现标准,即使在秘钥对生成不够可信的情况下,也可以保持“不可预测性”。

    1.3.1 完全唯一 和 可信唯一

    是指对于任意固定的VRF公钥以及任意的输入alpha,都存在唯一的可被证明有效的输出beta。

    (full uniqueness)指在可计算范围内对手不可能找到一个公钥pk,一个输入alpha,以及两个证明 pi1 和 pi2 使得 VRF_verify(pk,alpha,pi1) 输出 (VALID,beta1),VRF_verify(pk,alpha,pi2) 输出 (VALID,beta2),而 beta1不等于beta2。

    一个相对弱一点的安全特性叫(trusted uniqueness),对很多应用来说这就够了。可信唯一只在VRF公私钥是以一种值得信任的方式生成的情况下,才满足唯一性,其他就和完全唯一一样。换句话说,如果秘钥对生成方式有问题或者使用了不好的随机数,则唯一性可能无法保证。

    直白来说,就是(1)对于特定的一对公私钥(sk,pk),任意一个alpha都一对 (beta,pi),不存在说对于某个或某些输出无法生成证明的情况;(2)对于任意特定的 alpha,系统中的任何一对公私钥(sk,pk),都能生成唯一的与其他人不相同的 (beta,pi),不存在说对于某些输入有些私钥能构造有效证明但有些私钥却不能构造有效证明的情况。 其中相对弱一点是在于,对于只满足这个特性的系统来说,可以特意构造某个公钥 PK(它可能没有对应的有效的私钥),对于某个输入alpha,可以构造两个或多个不同的证明pi,用该PK都能验证通过。

    严格来说,世界上没有绝对的事,上面的表述都是基于密码学安全的意义之上的,就是说只要概率足够小,我们就认为它不会发生,比如概率小于 

    由上面表述可以看到,一个好的秘钥对生成算法,对VRF实现的唯一特性的保障是很重要的,这在我们选择某种VRF实现的时候,应该要加以考量。

    1.3.2 完全防碰撞 和 可信防碰撞

    是指,对手要找到具有相同输出的两个不同的输入alpha1和alpha2,在计算上是不可能的,即使他知道私钥也是如此。

    相对弱一点的安全特性是 ,这指的是防碰撞特性需要基于一种可信的生成公私钥的方式。

    1.3.3 完全伪随机 和 选择性伪随机

     确保对手在知道输出beta但是不知道证据pi的情况下,beta是随机的,不可能将其跟一个随机值进行辨别。 更精确地说,假设公私钥(pk,sk)是以一种可信方式生成的。伪随机性确保了即使输入是由对手仔细选择的,对于计算能力有限的对手,只要他不知道私钥,那么输出beta对他而言也是随机不可分辨的。甚至在对手有意选择多个输入并观察对应输出及证明的情况下,也是如此。 简单举个例子就是,分别对一组有规律的输入 [alpha1,alpha2,...,alphan] 计算其对应的输出[(beta1,pi1),(beta2,pi2),...,(betan,pin)],你去观察研究这些输出,不可能找出某种确定的规律。

    举个例子,伪随机特性可以保证,你想要生成一个小于某个值的哈希(比如按16进制输出后前面有10个0,0x0000000000...),然后希望能快速推断出一个输入x使其满足你的要求,这是做不到的。除了按穷举法计算VRF哈希之外,别无捷径。

    拥有特性,则允许对手在任意时刻选择输入。直白但可能不够准确地说,就是不管你什么时候给一个什么样的输入给我,你都无法知道我对该输入产生的输出哈希是大于还是小于某个值。

    是一个弱一点的安全特性,对于很多应用来说这也是足够的。这时,对手选择目标输入需要独立于VRF公钥,并且要在他观察到他选择的alpha'所对应的beta'和pi'之前。直白但可能不够准确地说,就是你知道了我的公钥以及我曾经的一些(alpha,beta,pi)信息,然后你特意构造一个新的输入,这时你可能可以知道我对该输入的VRF输出将会大于或小于某个值,而不用等我真正告诉你结果。

    需要记住,VRF的输出beta对证明人(或任何知道了私钥的人)来说,是不随机的。他们只要将beta和VRF_hash(sk, alpha)的结果进行比较,就可以轻易地将beta和一个随机值区分出来。

    同时,对于任何知道了对应pi的人,beta看起来也是不随机的。只要检查VRF_verify(PK, alpha, pi)是否返回 (VALID, beta),就可以将beta跟一个随机值区别开。

    还有,如果VRF秘钥对不是用可信方式生成的(例如,如果VRF秘钥对使用不好的随机数生成的),那么beta也可能看上去不是随机的。

    1.3.4 一个 “类随机预言机”的不可预测特性

     上面提到的伪随机性,在秘钥是由对手特意生成的情况下,是不满足的。例如,如果对手输出的秘钥是确定地生成的(或硬编码的并且是公开的),那么任何人都很容易获得VRF的输出。

    然而,在一些VRF应用中,存在一种不同类型的不可预测性。这种特性类似于由一种(普通的,不基于秘钥对的)密码学哈希函数所提供的不可预测性:如果输入具有足够的熵(如:不可能被预测到),那么正确的输出也是均匀不可辨别的。

    虽然关于此特性在密码学文献中既没有正式的定义,也没有证明,但在IETF中呈现的VRF实现方案中,只要公钥是以一种可信任的方式生成的,那么就可以相信满足了这个特性。额外地,如果公钥满足一些特定验证过程,那么即使公钥不是可信方式生成的,ECVRF也满足此特性。

    1.4 几种实现方式概述及选择考量

     VRF都是基于非对称加密技术来构建的,当前主流的非对称加密技术,有RSA和椭圆曲线密码学这两种。这两种技术都可以用于构建VRF实现。

    具体实现就不做详细介绍了,感兴趣的还是以参考IETF的标准为主。

    一般而言,一个基于RSA的VRF实现,能满足特性。不过,RSA方案的一个问题是,要起到足够的安全性,则RSA的秘钥长度需要比较长,这在很多应用场景下都不是很理想。

    而目前,在非对称加密领域,椭圆曲线加密是越来越被重视、越来越成为主流的非对称加密技术。因此,对于VRF的实现也应该尽量选用基于椭圆曲线的实现方案,这种方案可简称为 

    在具体实现时,可以有很多细分方案,包括选用不同的椭圆曲线、选用不同的将消息映射到曲线上的点的算法(需要注意,椭圆曲线密码学是基于有限域的,密码学中所说的 是离散的、不连续的)、选用不同的随机数生成算法等等。

    一般而言,ECVRF能满足特性,并且,如果在接收到一个VRF公钥时,做一些额外验证以验证公钥的有效性,那么ECVRF就能满足、和、特性。

    1.4.1 额外讨论:关于椭圆曲线的选择

    椭圆曲线是由如下形式方程式所定义的曲线:

    其中,可用于密码学用途的椭圆曲线有很多,曾几何时,最主流的曲线及相关算法都是由NIST(美国国家标准与技术研究院)选定和推荐的,称为NIST-P系列,比如广泛使用的 P-256 曲线。这种情况持续到了2013年,那一年,一个叫“爱德华·斯诺登”(Edward Snowden)的牛人曝光了NSA的棱镜计划,其中曝光了NIST标准中一个基于椭圆双曲线的随机数生成器,叫 Dual_EC_DRBG,包含后门,这可以使掌握该后门的NSA只根据生成器过去所产生的随机数样本,就可以预测后续的随机数输出,这样的随机数,对我们来说是伪随机的,对NSA来说是可预测的。这个事件引起了人们对NIST的信任危机,虽然这个Dual_EC_DRBG跟NIST-P的加密算法没有直接联系,人们可以使用其他的伪随机数生成算法,但是人们发现NIST-P曲线中都存在一些来历不明的没有任何说明的随机数种子,比如下面的常数(参见:Nothing-up-my-sleeve_number):

    • P-224: bd713447 99d5c7fc dc45b59f a3b9ab8f 6a948bc5
    • P-256: c49d3608 86e70493 6a6678e1 139d26b7 819f7e90
    • P-384: a335926a a319a27a 1d00896a 6773a482 7acdac73

    这时,一个新的曲线就闪亮登场了:Curve25519。Curve25519/Ed25519/X25519 是著名密码学家 Daniel J.Bernstein 在 2006 年独立设计的椭圆曲线加密/签名/密钥交换算法,和现有的任何椭圆曲线算法都完全独立。这些算法在开始的时候乏人问津,但在2013年之后一下子变得炙手可热,成为绝对的主流已是大势所趋了。

    这一方面是因为这套算法完全开放设计,没有任何秘密,没有任何可疑的参数;同时,这套算法确实足够优秀,足够安全。此外,还有点题外话,这位Bernstein之前还曾因为将自己设计的加密算法Snuffle发布到网上而遭到美国政府起诉,他抗争了6年,最后还是美国政府撤销了指控(跟全球大环境变化也有关系),但之后他还反诉政府,直到2003年底法院驳回他的诉讼,要他在政府制造了“具体威胁”之后再来。

    关于算法的安全性,Bernstein进行了全面的考察,结果见下面截图,具体参见这里

     

     

     

    目前Curve25519/Ed25519已得到广泛应用,人们正在全面抛弃NIST,拥抱Curve25519,应用情况可参见:ianix.com/pub/curve25… 和 ianix.com/pub/ed25519… 。

    1.5 VRF与数字签名算法方案的区别 对于刚接触VRF的人来说,可能很容易产生一个疑问:非对称数字签名算法,跟VRF有什么区别?或者说,非对称数字签名算法起不到VRF的作用吗?

    在非对称加密领域,存在数字签名算法,对于一对秘钥 (pk,sk)来说,可以计算消息 m 的签名 s = SIG(sk,m),然后知道公钥的人可以验证 s 是否确实是签名者用私钥对m的签名:Verify(pk,m,s)。另外,通过密码学哈希算法,也能得到消息m的哈希值。

    因此,这就跟VRF比较像了:

      1、 私钥拥有者可以声明自己的签名结果s,其他人通过公开信息(pk,m,s)可以验证该声明;

      2、s是不可预测的,这具有密码学上的安全性;可以再通过对s进行密码学哈希,得到一个不可预测的哈希值。

    那么为什么还需要VRF呢,直接用数字签名的方案不行吗? 关于此问题,主要原因是,VRF相比于数字签名方案,具有前面所描述的更多安全特性。对于数字签名方案,有以下主要缺陷:

      1、 签名结果s不是唯一的!对于很多数字签名方案,同一个私钥对同一个消息,可以给出不同的签名。比如对于EdDSA,如果 s = SIG(sk,m),那么 s+\ells+ℓ 也会是一个有效的签名,其中\ellℓ 是对应椭圆曲线基点(即生成元)的阶。

      2、s是不可预测的,但是s不一定是伪随机的。也就是说,s在取值范围内的分布可能不是均匀的。

    对于上面第1点,当然存在一些特定的数字签名实现,比如将[GMR88]中的数字签名方案中的随机数,使用[GMR89]中的GGM伪随机预言机代替之后,数字签名可以是唯一的。但是人们没办法确认签名者是否采用了这么一种方案,因此也就是说唯一性是无法保证的。

    无法保证唯一性的数字签名方案,可以认为是一种“可验证不可预测函数”,但不是“可验证(伪)随机函数”。

    2 Algorand VRF密码学抽签算法及应用

    2.1 抽签算法原理剖析

    2.1.1 抽签原理

    基于VRF的密码学抽签算法用于根据每个用户的权重,随机选出用户的一个子集。整个抽签过程中,需要保证:

      1、不存在上帝角色操纵整个抽签;

      2、每个参与者独立做自己的抽签,在主动公布自己的抽签结果之前,其他任何人都不可能知道该抽签结果;

      3、参与者公布自己的抽签结果后,系统中的其他参与者都可以验证该结果,参与者不需要泄漏自己的私钥;

      4、在一轮抽签开始之前,任何参与者都不能预先计算自己的抽签结果;

      5、抽签对所有参与者都是公平公正的;

      6、防女巫攻击。

     

    2.1.2 抽签算法

    对应前面的描述,抽签算法如下:

     

     

    3.2 抽签验证算法

    验证过程算法描述如下:

     

     

     

    2.2 抽签结果的概率分布

    根据前面的描述,我们知道整个VRF密码学抽签算法,是概率性的,概率符合二项分布。也就是说,给定期望值 t ,实际结果 k 是不固定的。在这种情况下,密码学抽签怎么应用与具体的场景,那就得具体情况具体分析了。

    在这里,我们先看一下如何计算抽签结果的概率分布。 如果总权重 W 是比较小的,从而概率 p 是比较大的,那这时直接用二项分布公式进行计算就可以了。

    但如果 W 很大,那就要考虑别的方式了。 首先,再列一下二项分布概率公式(为了和Algorand保持一致,下面用 U 代替 W):

    将其展开得如下式子:

     

     

     

    由于K是个比较小的值,当U很大时,下面的等式是可以接受的;或者换个方式说,当U大到我们可以接受如下式子的时候,U就足够大了:

     

     

     

    另外,U足够大时,我们肯定还能接受如下等式。其中分子转换成常数的指数,这是根据指数函数的定义来的。

     

     

     

    综合起来就得到当U很大,且期望为t时,实际抽签结果为K的概率为:

    2.3 在区块链中的应用及要解决的问题

    Algorand项目开创了密码学抽签算法在区块链中的应用,主要用在两种场景下:(1)通过抽签获得区块提议者;(2)通过抽签获得区块验证委员会。

    对于第一种场景,期望值 t 应该是比较小的,主要需要考虑的是,实际抽签结果 k 应该以很高的概率大于0,同时k又不应该很大。Algorand给出了一个值 t = 26,这时k在1到70之间的概率为:

     

     

    条件1:#good > t * r

    #good表示诚实票数

    通过上面的概率公式,这个条件不满足的概率是可以计算出来的,不满足的概率为:

     

     

     

    对于条件2,抽取 #good = K 并且 #bad = L 的概率如下:

     

     

     

    条件2不满足的概率是不大好算的,实际评估时,我们可以先计算条件2满足的概率,公式为:

     

     

     

    用 1.0 减去计算结果,可得到条件2被违背的概率。 > 当然,先计算概率大的情况时,计算精度会降低。

    上面两个条件均不满足的概率需要极小极小,才可以认为不会影响系统的活性和安全性。举个浅显的例子就是:假设定下来 t = 100, r = 0.7, h = 0.8。那么投票阈值就是70,但是由于抽签结果的概率性,那么如果抽签结果不足70,那就完不成投票了,如果抽签结果大于140,那在网络不好的情况下是不是可能出现分歧(分叉)呢?另外,由于总体诚实比例只有0.8,那也有可能抽签结果中不诚实数直接就超过70,那也可能搞乱整个投票,这时,确切地说就是条件2的情况。

    综上,理论上来说,活性和安全性都是无法绝对保障的,但是可以考虑一个很小的概率 F(如),当两个条件被违背的概率均小于F时,我们可以认为这样的事件基本不会发生。

    这个 F 跟 t,r,h都有一定的负相关关系,就是t,r,h中任意两个值不变的情况下,第三个值越大,F就越小。例如,r,h不变时,t越大,F越小。

    还有一个问题,t也不是越大越好的。t很大时,虽然可以使F很小,但是在一个分布式网络中,t越大则完成投票所需要的通信量也就越大,所以这需要权衡考虑。

    以上,就是本文分享的所有内容了。至于Algorand项目中是如何权衡相关问题的,敬请关注后续分享。

    参考

     

    展开全文
  • Algorand源码架构分析

    2020-01-17 11:23:31
    Algorand源码架构分析 摘要 本篇主要介绍Algorand源码中关于agreement的模块结构及业务逻辑架构,也是源码中比较难以理解的地方 本篇主要介绍Algorand源码中关于agreement的模块结构及业务逻辑架构,也是源码...

    Algorand源码架构分析

     

     

    摘要

    本篇主要介绍Algorand源码中关于agreement的模块结构及业务逻辑架构,也是源码中比较难以理解的地方

    本篇主要介绍Algorand源码中关于agreement的模块结构及业务逻辑架构,也是源码中比较难以理解的地方,其它诸如节点、区块、密码、P2P网络的结构与其它区块链项目都是大同小异,很容易理解,这里就不再赘述。
    1. 节点启动

    一切从main开始:

     

    Node模块中还提供了各种pool,这些pool用于对网络中的proposal与vote进行验证时的任务队列。

    Algorand源码架构分析

    下面这句开启我们的agreement协议:

    Algorand源码架构分析

    2. Agreement
    协议是Algorand最重要的一个模块,在其中用service做一个总的任务调试,状态机负责对投票进行统计,demux负责具体action的执行,从网络上收集proposal与vote,是Algorand的二元拜占庭(BBA)实现的部分。
    2.1 service
    这一个模块中分为两大部分:
    模块A:具体的proposal、vote验证,及转发
    模块B:状态机机制:处理针对每个区块共识周期内的投票统计
    这两个大模块之间通过三个chan来进行互相驱动:
    模块A做完自己的具体工作,会给externalEvent通道写入event,模块B从这些通道读数据,进行对应的统计处理;
    模块B做完自己的统计处理工作,会给action通道写入对应的action,给externalDemuxSignals通道写入对应的signal

    Algorand源码架构分析

    这几个chan促成了模块A与模块B之间的互动:
    模块A是input的生产者,是output与ready的消费者;
    模块B正好反过来,是input的消费者,是output与ready的生产者。

     

    2.2 状态机
    这里的代码主要是对vote与proposal进行统计,一个区块共识周期内的两轮多步投票的统计都是在这里完成的,分为5层状态机,每层只负责处理与自己有关的,上层处理不了的,移交给下层状态机,下层状态机将处理结果返回给上层状态机,最终发出对应的action。

    Player即playmachine实现了整个状态机的最顶层功能,负责记录当前哪个区块第几个阶段第几步的共识环节,以及超时等基础信息。
    proposalManager是proposal的管理类,在这里监测proposal是否已经超过阈值,如果超过,向上层发出proposalCommittable的事件。
    voteAggregator是vote的管理类,也是用来监测是否vote已经超过阈值,向上层发出threshhold。
    proposalStore是round层的主类,主要用来存储proposal,以存储的权重来最终判定proposal是否达到一定数量。
    voteTracker是step层的主类,用来存储vote,是最初发出vote超过阈值的地方。
    各个类的具体功能,仔细查看代码并不难理解。
    在这一模块中定义有两个类,一个是router接口,一个是routerHandle结构体。前者用于真正的event处理,而后者只是为了构造一个新的结构,加入写日志功能及标明状态机类型,起辅助功能。routerHandle的dispatch最终其实是转到了对应的router的dispatch中去执行的。

    Algorand源码架构分析

    2.3. Action
    状态机针对vote与proposal进行统计后,会发出一系统的action,这些都由各个对应的类去处理。

    Algorand源码架构分析

    在actions.go里会看到不同种类的action,我们只要在对应的类里去查就知道如何处理各个action,action就是对应我们实际要处理的各个动作。

    Algorand源码架构分析

    2.4. 外部消息
    在demux.go文件里,next函数负责从消息通道里获取消息,转化成对应的事件传给状态机

    Algorand源码架构分析

    3. MakeProposals与MakeVotes
    MakeProposals发出一个proposal,其实就是提议一个区块,同时自己对这个区块进行投票。MakeVotes就是对proposal直接进行投票。
    pseudonode里MakeProposals,会经过pseudonodeVerifier这个service里的这个对象做一个异步队列:
    s.voteVerifier = MakeAsyncVoteVerifier(s.BacklogPool)
    verificationPool,是基于backlogpool与POOL来实现的,最后每个任务的实际执行又回到了pseudonode里的execute。兜兜转转一圈,其它都只是工具,主类还是这个pseudonode,在这里makeproposal与makeVote,异步调用的真正执行也是在这个类文件里,对应类的execute。.在这个execute里才去做的makeProposal与makeVote.
    4. 如何选出领导者
    我们知道是对credential,也就是凭证做排序,最小的就是领导者。这些其实发生在每一个节点上,在每一个节点上对所有voteVerified的事件做处理,比较大小得到。
    看代码,在状态机proposalMachinePeriod对应的主类proposalTracker中,handle处理消息的主函数

    Algorand源码架构分析

    这里的freezer就是proposalSeeker的一个对象,这个类负责记录credential值最小的那一个,那停止时间是什么呢,就是说这个时间段的结束时间是什么呢?
    proposalFrozenEvent这个消息发出来后,在状态机里

    Algorand源码架构分析

    这样freeze就对leader完成了选定,我们再查什么时候发出这个事件。这个是由超时函数来控制的,在主状态机里,timeout事件,当step是soft步骤时,超时,就进入cert阶段,这时就得终止这个credential最小值的选择了。
    本篇并未对Algorand的每个细节知识进行深入的阐述,而是从代码的大框架上做一个简单说明,希望可以帮助大家理清数据流的走向,把握源码架构。

     

    展开全文
  • 2018年2月,图灵奖得主、MIT教授Sivio Micali募集400万美元开发Algorand区块链协议一事受到了国内外媒体的普遍关注。2017年春天,笔者有幸在MIT选修了Micali教授和MIT媒体实验室数字货币计划负责人Neha Narula合开的...
  • algorand共识算法.pdf

    2020-04-01 17:37:36
    Algorand是图灵奖获得者Silvio Micali主导研发的一种加密货币方案。该方案通过密码学抽签算法实现了拜占庭共识算法的大规模扩展,从而适用于公链数字货币体系。同传统加密货币共识算法PoW、PoS等相比拥有更安全、...
  • Algorand协议详解

    千次阅读 2018-04-27 14:02:47
    原文链接:https://mp.weixin.qq.com/s/FD_zkmNcLHv440Y2oqpoagAlgorand背景介绍 (Background)Algorand是MIT机械工程与计算机科学系SilvioMicali教授与合作者于2016年提出的一个区块链协议,主要是为了解决比特币...
  • ALGORAND论文翻译

    2018-09-10 11:19:40
    摘要 公共账本是一组数据的防篡改序列,每个人都可以读取和扩充这些数据。公共账本有无数的引人注目的用途。...公共账本不仅能遏制腐败,而且能适用非常复杂的应用程序,例如加密货币和...Algorand是一个真正民主和...
  • rust-algorand-sdk-源码

    2021-05-30 16:07:58
    rust-algorand-sdk 文档 通用 Algorand 文档可在 快速开始 use algosdk :: {AlgodClient, KmdClient}; fn main () { let algod_address = "http://localhost:8080" ; let algod_token = "contents-of-algod.token...
  • Algorand基金会最近发布了Algorand 2.0,这是一项重要的协议升级,极大地扩展了可在Algorand平台上构建的去中心化应用程序的范围。借助所有直接内置在第1层中的新功能套件,可以创建企业级分布式应用程序的同时并...
  • Algorand 技术解析系列

    2019-07-01 15:55:41
    YOUChain Research YOUChain 研究团队,成员毕业于国内外顶级名校,有长期的工业界经验。...Algorand(Algo)是学术界和工业界都享有盛名的项目。在笔者看来,至少有几点值得称道: 1.将 VRF 引入公链,为「不可能...
  • 在Ubantu下安装algorand

    2021-04-09 12:00:52
    在Ubantu18.04下安装algorand Algorand是纯权益证明(pure proof-of-stake)的区块链。本文主要介绍如何在Ubantu18.04下安装algorand。 下载Algorand 首先下载Algorand的官方实现压缩包,下载地址为: ...
  • PyTeal:Python中的Algorand智能合约 PyTeal是的Python语言绑定。 使用基于堆栈的新语言(称为来实现Algorand智能合约。 这是一种非图灵完备的语言,它允许分支转发,但阻止了递归逻辑以最大化安全性和性能。 ...
  • Algorand抽签算法详解

    千次阅读 2018-07-31 16:42:57
    Algorand是图灵奖得主Micali教授提出的一种新的共识算法,论文地址: https://people.csail.mit.edu/nickolai/papers/gilad-algorand.pdf 和目前流行的DPOS+BFT共识相比,最主要的创新是将proposer和...
  • go-algorand Algorand在Go中的正式实现。 Algorand是未经许可的纯权益证明区块链,可提供去中心化,可伸缩性,安全性和交易终结性。 入门Ou go-algorand Algorand在Go中的正式实现。 Algorand是一种未经许可的纯权益...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 754
精华内容 301
关键字:

algorand