比特币被称为区块链1.0,以太坊被称为区块链2.0,那么作为区块链2.0时代的代表以太坊最引人注目的创新就在于它的“智能合约”,本文为大家讲解智能合约。
智能合约是什么?
我们都知道传统的合约或合同是当事人之间设立、变更、终止民事权利义务关系的协议,那么智能合约有什么区别呢?它是一种以信息化方式传播、验证或执行合同的计算机协议。其次它允许在没有第三方的情况下进行可信交易,这些交易可追踪不可逆转。智能合约的概念最早是是由密码学家和计算科学家Nick Szabo在1995年提出。(他当初在自己发表的文章中提到了智能合约的理念:一个智能合约是一套数字形式定义的承诺,包括合约参与方可以在上面执行这些承诺的协议)
智能合约的初衷是提供优于传统合约的安全方法,并减少与合约相关的交易成本。但是智能合约现在还不算太智能,目前来说和现实生活中的法律协议也不一样,它只是运行在区块链顶部的计算机代码,或者说是程序员编写的一个软件程序,程序里面包含了一些规则,只要满足了预先制定的规则,协议就会自动执行。
智能合约如何执行?
相信大家经常面临着被朋友借钱犹豫到底借不借的问题,不借怕伤害了朋友的面子,借了呢,又不知道对方什么时候能还。那么用智能合约来执行的话就简单多了,比如你借给你朋友王二10000元,并在没有第三方在场的情况下与他约好一个月后还款,双方设置好条款,一个月后合约会自动将10000元从王二的账户上划转至你的账户中。
所有的智能合约大多都遵循类似的原则,对程序进行预先编码,设置好规则,根据规则自动执行。那么智能合约的参与者相比传统合约的优点在于它比手动结算效率高,解决了信任问题,执行时减少了交易成本等。
智能合约的工作流程是怎样的?
竟然是一种数字形式定义的承诺,那意味着需要写入计算机的可读代码中。当参与方达成协定,智能合约建立好权利和义务后,剩下的就由计算机或其网络执行。
1.达成协定:参与方制定相关的合约条款,比如执行条件,执行日期,相关的法币要求等。
2.事件:指触发合约执行的事件,可以是接收到的信息也可以是交易的发起。如借钱例子中的到期还款。
3.合约执行以及价值转移:合约执行满足条件的价值转移。以上面的例子来说,从王二的账户里转10000元给我,就是一次价值转移。
4.结算:通过两种方式实现:一是链上资产(数字),适用于虚拟资产,账户自动结算。链下资产,适用于如股票、法币等现实中的资产,账户更改将与链下结算指令相匹配。
智能合约的优点与缺点有哪些?
优点:透明,精确,安全,快速,效率高,永远存储和备份,信任,降低成本。
由于智能合约是部署在区块链上,所以合约规定上的相关条款对所有参与者都是可见的,因为合约一旦建立就不可随意篡改,也保证了参与方的利益;智能合约作为一个数字形式的承诺,其结果相对来说是很精确的;智能合约采用了数据加密,它的保护级别算是目前互联网上最安全的;运行在区块链上的智能合约,同样被区块链上网络节点共同维护,只要区块链在,智能合约就能永久的运行下去。同样的,智能合约记录的资料也将永久保存,以备将来参考。此外,如果有数据丢失,也可以很容易地被检索到。
缺点:安全问题
智能合约是“执行合约条款的计算机交易协议”。区块链上的所有用户都可以看到基于区块链的智能合约。但是,这也会导致包括安全漏洞在内的所有漏洞都可见,并且可能无法迅速恢复。
智能合约所遵循的ERC标准有哪些?
你可能会经常听到有人说ERC-20代币,但自己却听得云里雾里不知如何接话,那么接下来就带大家了解一下。ERC标准是由以太坊开发人员编写的,开发人员基于这些标准构建智能合约,目前最流行的被大家讨论最多的就是ERC-20标准。除了ERC-20标准外,还有些ERC标准,如:ERC-223、ERC-621、ERC-721、ERC-827。
什么是ERC?
ERC(Ethereum Request for Comment)即以太坊通用意见征求意见协议,每一个开源的社区都需要一个系统来处理成员提出的请求和对请求的采纳。ERC就在以太坊网络中行使这样的一个职能,ERC为开发者提供了技术指导,也对以太坊网络的发展提供了建议。
ERC是谁编写的?
ERC标准是由以太坊开发人员为以太坊社区编写的。他们为了给以太坊平台创建标准,提交了以太坊改进建议( EIP )——包括协议规范和合同标准。如果EIP被委员会批准并最终确定,它就成为了一个ERC。
EIP的完整列表请参阅:
https://github.com/ethereum/EIPs
ERC有什么作用?
这些被委员会批准确定的EIP,为以太坊开发人员提供了一套可行的ERC标准。由于EIP的接口是开放的,所以开发人员可以基于这些标准之上构建智能合约。其中ERC-20是整个加密社区中最流行的标准,以太坊平台上的所有通证都使用这一标准。
1、ERC-20
ERC-20是整个加密社区中的所有标准中名气最大的,而且大多数基于以太坊平台发布的token都基于ERC-20协议。ERC-20协议清晰的定义了基于其标准发布的代币将在以太坊网络中怎样运作。
因此,ERC-20对开发者的影响是巨大的,因为它们再也不用为了发行一个新token而重做整个项目了。如果这些token是符合ERC-20标准的,那么它们就会与新token兼容。ERC-20规则被开发者大规模采用,这意味着基于以太坊的ICO发布的大多数token都符合ERC-20标准。
ERC-20标准包括以下方法:
totalSupply():返回通证的总供应量。
balanceOf(address _owner):_owner账户的账户余额。
transfer(address _to, uint256 _value):发送数量为_value的通证到地址_to,触发Transfer事件。
transferFrom(address _from, address _to, uint256 _value):从地址_from发送数量为_value的通证到地址_to,触发Transfer事件。
approve(address _spender, uint256 _value):允许_spender提取一定数量的金额。
allowance(address _owner, address _spender):返回允许_spender从_owner提取的金额。
以上这些方法将会触发以下事件:
transfer(address indexed _from, address indexed _to, uint256 _value):当token被转移时则会触发。
approval(address indexed _owner, addressindexed _spender, uint256 _value):成功调用approve方法后则会触发。
ERC-20标准于2015年被提出,并于2017年9月正式确定,这是通证标准化的一个很好的开始。但是,社区中的一些开发人员指出,这个标准存在缺陷和漏洞。另外,有些用例的确需要使用不同的标准,下面介绍一些其他的ERC标准。
2、ERC-223
状态:打开
提出日期:2017年5月3日
开发人员Dexaran详细描述了ERC-223标准适用的两种场景:
在ERC20通证标准中执行交易有两种方式:
1.transfer方法。
2.approve + transferFrom 机制。
通证余额只是通证合约中的一个变量。
通证的交易在合同中的表现是变量的变化:转出账户的余额将减少,接收账户的余额将增多。
交易发生时, transfer方法不会通知接收账户,接受账户也将无法识别传入交易!下面是我写的一个例子,来展示导致交易未处理和资金损失的过程 。
如果接收账户接受到的是合约,用户必须使用approve +transferFrom 机制来转移通证;如果接收账户是外部帐户地址,用户必须通过 transfer方法转移通证;如果选择了错误的方法,通证将被卡在合约中(合约将不会识别交易),那么,我们将无法提取这些被卡住的通证。
Dexaran提出的ERC-223标准就解决了这一问题,而且,它与ERC-20标准非常相似。当通证转移到智能合约时,该合约的一个特殊方法tokenFallback将允许接收合约、拒绝通证或触发进一步的操作。在大多数情况下,tokenFallback方法可以用来代替approve方法。
3、ERC-621
状态:打开
提出日期:2017年5月1日
ERC-621标准是ERC-20通证标准的扩展。该标准增加了两个额外的方法:increaseSupply 和decreaseSupply,能够增加和降低流通中的代币供应量。而ERC-20标准仅允许单个通证发放事件,这就限制了一个固定的不可更改的供应量。而ERC-621标准则建议totalSupply是可以修改的。
4、ERC-721
状态:打开
提出日期: 2017年9月22日
ERC-721标准与ERC-20标准、ERC-23标准非常不同,它描述了一种不可互换的通证。这就意味着每个通证各不相同,并且每个通证对不同的用户具有不同的值。比如以太猫(CryptoKittes):每个数字猫都是一个独立存在的商品,其价值取决于该种类的稀有性和用户的喜好。
ERC-721通证标准可以在任何一个交易中使用,但通证的价值则是“与每个通证相关联的唯一性和稀缺性的结果”。该标准的函数包括name, symbol, totalSupply, balanceOf, ownerOf ,approve , takeOwnership , transfer , tokenOfOwnerByIndex, tokenMetadata。
ERC-721标准还定义了两个事件:Transfer和Approval。Gerald Nash(杰拉尔德·纳什)的文章就很好地解释了可互换性这一概念。
GeraldNash文章:剖析ERC721
链接:https://medium.com/crypto-currently/the-anatomy-of-erc721-e9db77abfc24
5、ERC-827
状态:打开
建议日期:2018年12月1日
ERC-20标准的另一个扩展是ERC-827标准,它允许用户转移通证,持有者也能允许第三方使用通证。以太坊上的通证可以被其他应用程序重用,这其中也包括钱包和交换机。在需要支持第三方动态消费限额调整时,这一点非常有用。另外,最重要的一点是,由于它是ERC-20标准的扩展,所以它也跟ERC-20标准兼容。
该标准中的一些方法如下所示:
transferFrom(address_from, address _to, uint256 _value, bytes _data) returns (bool success)
function approve(address_spender, uint256 _value, bytes _data) returns (bool success)
以上便是几个比较知名ERC标准的介绍。