共识算法(Consensus Algorithm)是保证区块链可信度和安全性的重要技术。目前,有多种主流的共识算法,如工作量证明(Proof of Work, PoW)、权益证明(Proof of Stake, PoS)等等,各有其优、缺点与适用对象。在区块链技术领域,不可小觑共识算法的重要地位。

我们与Algorand合作,共同为大家带来的硬核分享
“深度解析共识算法”系列活动目前已进行到第三讲。在本期分享中,Algorand基金会Associate Director朱海潮,为诸位Hacker讲解Algorand平台开发实践
在本篇回顾中,你将读到关于本次分享的全部核心内容和在线答疑部分。预计阅读时间30分钟。脑洞猫建议各位将这份干货十足的硬核分享回顾添加收藏,以便温故知新哦!

Algorand 这个名字既代表了一个创新的共识算法,也代表了一个基于该共识算法实现的公链平台。在前面的课程中我们已经学习了共识算法相关的所有内容。如果你确实完全跟着学习了前两个讲座的话,那么你对于共识算法的理解应该已经高于99%的小伙伴了。没来得及的朋友和可以去看看前两次讲座的整理文章。
今天我们会讲解在 Algorand 平台上开发是怎样一种体验。一般想要入门一个新的区块链平台,只需要搞懂四个概念就可以了:区块,交易,地址(也叫钱包或账户),以及该平台上的自定义资产(即 ASA,Algorand Standard Asset)
今天的讲座我们就按照这个顺序来介绍。
区块
Algorand 区块链使用 Algorand 共识算法进行区块和交易数据的共识。
在 Algorand 区块链浏览器中查看的时候可以发现,有时候区块高度使用轮次(Round)这个词来表示的。
这是因为在 Algorand 中,每一轮共识算法的流程结束之后都会产出一个块,即一个共识轮次对应一个区块。
这就意味着,Algorand 区块链在共识过程中不会产生分叉,同时每个区块中的交易都可以在一个区块内被立即被确认,而并不是像以太坊一样需要等待十几个区块才能确认交易。
目前 Algorand 主网上的区块确认时间约为4秒,也就是说一笔交易4秒即可实现最终确认(Finality)。
交易
交易的类型有三类:(1)ALGO 交易:用于发送 ALGO 代币(2)ASA 交易:用于创建,发送和配置 ASA 资产(3)参与共识交易:用于注册地址从而参与到共识当中。
这三类交易都使用了相同的交易体结构,在构造交易时可以选择不同的交易类型,并填写对应的交易信息。
创建交易和交易签名的过程都可以离线完成,签名之后的交易可以被发送到节点处进行验证和广播。
交易的 ID 是离线生成的,在构造完交易并签名后就可以立即获得交易 ID;而不是像以太坊一样需要等待节点返回交易 ID。
这里的好处是可以避免交易 ID 重复的交易被多次执行,同时也不需要使用类似以太坊中的 nonce 的机制免去了钱包等客户端管理和记录 nonce 的工作。
原子交易
除此以外,Algorand 还原生支持原子交易功能。
当你希望几笔交易能够同时进行时,就可以使用原子交易的功能。
该功能允许你将几笔交易组合在一起,变成一笔交易。只有当这笔组合后的交易被其中所包含的所有交易的发送方都签名之后,该交易才能被确认。
如下图所示:
该功能可以使用 SDK 轻松实现,下面使用 Python SDK 做一个示例:
这里的逻辑也非常简单:当多方进行交易时,为了实现所有交易的原子性(即要么都成功上链,要么都失败),只需要把几笔交易收集起来,计算一个组交易 ID 出来,然后再让所有人带着这个 ID 去签名自己的交易,就算是确认允许自己的交易在这一组交易中合法了;之后只需要把所有签过名的交易打包发送上链,就可以实现这一组交易的原子交易的功能了。

轻松加愉快。
地址
Algorand 上的地址有三种:(1)个人账户地址(2)多签账户地址(3)逻辑账户地址
个人账户地址就是普通的钱包地址,有私钥作为密码,地址本身由公钥生成。当需要从该地址发送交易出去时,则需要使用对应的私钥对交易进行签名,才能在区块链上认证通过。
多签账户地址
多签账户地址是由多个个人账户地址组成的地址。用户可以通过使用 SDK 将多个地址组合成一个多签地址,并指定至少需要其中 n 个地址的签名才能解锁该地址。

比如可以将三个地址组合成一个多签地址,并指定解锁地址数为2,即当有其中两个地址的私钥对交易签名后,该交易就可以使用该多签地址中的资产。
用 Javascript 的 SDK 实现时会是这么一种体验:
是不是简单到爆?这都归功于 Algorand 在密码学上的独特优势,这才能为开发者们提供真正互联网时代的开发体验。
逻辑账户地址
逻辑账户指的是一个由程序控制的账户。这种账户和普通账户一样可以存储 ALGO 和 ASA 资产,但不一样的是,从逻辑账户发出的交易并不是通过签名来实现的,而是使用该账户对应的逻辑程序来判断的。

这里的逻辑程序就是 Algorand 上的智能合约 ASC1 (Algorand Smart Contract) 了。Algorand 团队设计了一种简单的脚本语言 TEAL 来实现这种逻辑程序。
在具体使用时,我们先使用 TEAL 语言编写脚本实现逻辑,然后再使用工具对脚本进行编译,就可以得到一个逻辑账户地址和一个逻辑签名;我们可以正常从一般账户向该逻辑账户地址充值;若是想从该账户中转出一些资产,则需要使用该逻辑账户地址作为发送方,再使用其逻辑签名对交易进行签名;最后再将交易发送上链,区块链就会依据事先编写的脚本逻辑来判断这笔交易的合法性。
使用这个功能,再加上之前提到的原子交换,我们就可以实现很多的功能了。这里提供一个账户实现自动兑换 ASA 代币的功能作为示例。
首先编写一个脚本,逻辑为:
用 TEAL 脚本实现逻辑的代码如下(注意⚠️:这里为了方便省略许多其他的安全性判断,比如对交易手续费的判断等,在实际操作中需要注意,完整代码请参考文档:https://developer.algorand.org/):
之后我们需要使用编译工具对上面的代币编译,可以得到一个 Base64 格式程序字符串和逻辑账户地址;接着就可以使用 SDK 来构造和发送交易。
这里使用 Java 语言的 SDK 作为示例(省去了组合交易的部分,具体可参考文档:https://developer.algorand.org/):
地址最小余额
关于账户,有一个在区块链设计中必须注意的问题,那就是防止地址的滥用。
在区块链上每一个地址的都将占用网络中节点的存储空间,若是允许用户无成本的在链上创造地址,那么将会使存储的占用大大增加,从而增加节点的负担,降低网络的去中心化程度。
以太坊上防止类似问题的机制是提供奖励,当用户主动发送交易销毁一个地址时可以获得一些 Gas 的奖励。
但在实际中这种方法显然并不奏效。2017 年的 ICO 泡沫产生了大量的无用合约和地址,大量的占用了存储空间,使得节点负担剧增。目前若是想要同步一个以太坊存档节点,已经需要至少 3T 的硬盘空间,并且必须是 IO 速度在 5,000 以上的 SSD 才可以。
Algorand 在这个问题上的解决方案是直接增加创建地址的成本。Algorand 上的地址是有最小余额的。每个普通的 Algorand 地址都需要持有最少 0.1 个 ALGO;当地址持有 ASA 资产时,每持有一种 ASA 资产,该最小余额增加 0.1 ALGO。
若一笔交易试图将某个账户地址上的 ALGO 数量减少到少于最小余额,那么该交易将不合法。
如果想要提取所有剩余 ALGO 并注销地址,可以使用交易中的 CloseTo 参数来实现,具体方法可以参考文档:https://developer.algorand.org/
ASA

Algorand 上的自定义资产 ASA 是由原生功能实现的,而不是像以太坊上的 ERC20 那样通过部署合约实现。
创建资产,设置资产信息,冻结资产,发送资产等这些功能都可以通过发送原生的交易实现,而不需要去调用任何的自定义合约。
SDK 中也有对应的功能,这里用 GO 语言的 SDK 做一个示例,在链上创建一个 ASA 资产:
需要注意的是,每个地址在接收 ASA 资产之前,都必须要进行一次注册(Opt-In),即通过向自己发送一笔数量为0的该 ASA 资产的交易,来告诉区块链,自己已经准备好接收这种资产了。

这种设计主要是为了未来合规做打算:Algorand 作为一个金融平台,上面会发行各种合规的金融资产。而大部分合规资产都会要求发行人和出售方对于购买方实行 KYC 制度。这就意味只有一个账户经过一种 ASA 资产的 KYC 之后,它才有资格去接收这种资产。
Algorand 的这种设计,原生保障了链上 KYC 的可行性,将无国界金融(Borderless Economy)这个口号用代码落实在了实际设计中。
用 SDK 实现 ASA 地址注册的方法如下:
接下来就是发送 ASA 资产。过程与发送原生资产 ALGO 一模一样,只需要调用一个 SDK 函数构造一笔交易,填写好参数,再签名发送即可。

除此以外,Algorand 还提供了 ASA 的冻结和销毁等功能,具体的细节可以参考参考文档:https://developer.algorand.org/。

写在最后
也许大家会注意到:Algorand 目前并没有提供所谓图灵完备的智能合约功能给开发者。这一点完全是从产品角度出发考虑后所作出的决定。
图灵完备的合约拥有着最大程度的灵活性,但获得这些灵活性来自于对安全性和便利性的妥协。当开发者能够使用更多的函数和功能时,就意味着他们需要更多的代码才能实现一个简单的功能,这就增大了攻击面,降低了使用的便利性。
同样是去中心化交易所中所必须的原子交易功能,Algorand 上原生自带,使用起来只需几行代码,安全性也更高;但在以太坊上则需要通过部署一个复杂的合约才能实现。
就好比 Windows 和 MacOS 上的应用程序:一个可定制性更高,但不知什么时候就会中病毒的招,各类弹窗广告也层出不穷;一个功能少但更简洁,满足需求的同时保证了安全性和便利性。
未来 Algorand 还会针对开发者的需要来不断扩充功能,保证在安全和便利优先的条件下,满足所有去中心化应用的开发需求。
同时还可以注意到 Algorand 将大部分的功能都放到了链下实现,只有需要验证,并且经过共识的信息才会发到链上。大部分的计算工作都不需要与链打交道,这就减轻了链的压力,同时也提升了开发的效率。
除此以外,同样是为了方便开发者,Algorand 提供了命令行工具 goal 和 Javascript,Java,Python,GO 四种语言的 SDK 来协助各位进行开发。
实际上如果细心观察的话,就可以发现今天讲座里的代码示例我就用了四种开发语言分别展示。更多的工具可以参考开发者文档:https://developer.algorand.org/。
总而言之,Algorand 致力于将开发门槛降到最低的这份心意,希望大家都能通过今天的这个讲座确实的接收到。
讲座的最后再布置一个作业,希望大家回去之后都能在 Algorand 上去发行一个属于自己的 ASA 代币。前十名发行成功并提供地址给我们的同学,我们将给予 100 ALGO 的奖励。想了解更多详情,请访问下方Github地址
https://gist.github.com/Mine77/23e513462ad55f9da2888996e4deeae5
去吧,Algorand 的大航海时代开始了!世界上的一切都放在那里,想要的话就去拿吧!
精选问答
Q: ASA 和 ERC20 有什么不同?
A: ERC20 是以太坊上通过智能合约实现的,而 ASA 是 Algorand 区块链上原生的功能。原生功能的好处有两点。首先是用起来会简单很多,发行和管理 ASA 的操作都和操作原生代币一样。这也为 DeFi 打下了基础,比如以太坊上会需要 WETH 这种东西,它实际上是一个用 ERC20 替代 ETH 的币,与 ETH 1:1 抵押发行。需要它的原因就是在以太坊上操作 ETH 和操作 ERC20 代币有差别,所以只能通过把 ETH 变成一个  ERC20 代币,才能正常使用合约操作。第二个好处是节省合规和安全性审查的成本。一般的 ERC20 代币上钱包或者交易所的话,都需要提交第三方的代码审计报告。这样一份审计报告一般需要五万美元起,这对于小创业团队来说还是一份不小的负担。同时如果想要合规,也需要通过一些审查,这都是成本啊。但是 Algorand 上的 ASA 属于原生功能,已经是经过了审查的。所以 ASA 代币想要上钱包或交易所都不需要额外提交审计报告。Algorand 官方也正在准备合规框架,进一步减少发行合规 ASA 的成本。
Q:Algorand 的 stateless 智能合约是否会导致可实现的功能受限?
A: 会降低一些灵活性,但是会收获安全性。 
Q: 注册过程和KYC是怎么联系起来的呢?
A: 使用原子交易+ ASC 功能,已经基本上可以实现所有现有的 DAPP 所需的功能了。开发模式会更像 Rust 中的 Pure Function,即函数式编程的模式。目前官方也提供了很多示例,想要在 Algorand 上面开发的同学可以了解一下,也可以跟我联系🙋‍♂️

往期回顾
MimbleWimble技术全解析
Asta Xie: 玩转Go语言,从beego开始
Sun教你用Rust玩转区块链加密
Mike Tang跟你聊Rust与区块链开发
郭宇讲解零知识证明 
Eric带你回顾区块链技术发展&了解Defi、Dao、隐私最前沿技术热点
柯平教你区块链分片
悬镜解读区块链世界的攻与防
悬镜教你审计以太坊合约
深度解析共识算法系列之入门
深度解析共识算法系列之详解
Hacker Speaker 只聊硬核技术! 欢迎各位Hacker扫码添加脑洞猫为好友订阅我们,订阅用户将收到我们每一期Hacker Speaker分享活动邀请,无需重复审核入群,再也不用担心错过任何精彩活动和回顾啦!
DoraHacks是中国社区覆盖范围最广,全球最活跃的极客组织之一,成立5年来,DoraHacks联合600多家合作伙伴在8个国家15个城市燃起科技团战烽火,积累了3000余项目,辐射30万名开发者,并于今年7月发起“第四次工业革命”千人黑客马拉松。
DoraHacks的使命是连接全球极客,解决重要而迫切的问题,成为未来行业问题的最新解决方式。
了解更多关于DoraHacks“第四次工业革命”极客马拉松详情,请关注DoraHacks官方微信、新浪微博@DoraHacks #第四次工业革命极客马拉松#
继续阅读
阅读原文