实现 Token,除了 ERC20,我还有别的选择吗?

为什么 ERC20 智能合约会爆出如此严重的安全问题?

文 / Zengb

以太坊 ERC20 Token 标准协议自 2015 年 11 月 19 日诞生以来,为智能合约、以太坊生态以及区块链应用的发展做出了巨大贡献,截至2019年中旬,以太坊主网上有超过18.1万个兼容ERC20的token。而基于 ERC20 标准实现 token 时,可以不用重复“造轮子”,简化了开发工作,因此发行基于 ERC20 标准的 token 基本不超过10分钟,50行代码。而且ERC20 token 互相兼容,增强了 token 的交易量和流动性。正是得益于ERC20标准的出现,基于以太坊的 DApp开始百花齐放,甚至可以说 ERC20 的出现很好的推动了区块链应用领域的发展。

然而不可否认,在 ERC20 Token 逐渐发展的过程中,不少 ERC20 智能合约曾出现过重大漏洞,对项目方、投资人、交易所等造成了巨大的经济损失,去年7月中旬,加密货币交易所 Bancor发布的一份声明,由于在7月9日遇到“安全漏洞”(当时一个钱包正在升级某些智能合约时发现受到攻击,之后该钱包撤回了以太坊和ERC20 Token NPXS 和 BNT)交易所已经进入暂时停业状态。据外媒报道此次攻击事件,涉及金额超过 1250 万美元。

区块链项目中,发行 Token 是使项目生态系统良好运转的有效手段,这是因为 Token 可以看作是价值的载体,可在项目的生态系统内部作为一种支付方式使用,赋予持有者参与区块链网络的权利。然而 ERC20 智能合约的安全问题,使项目方陷入两难境地:To be, or not to be, that is the question. 那么实现 Token,除了 ERC20,我还有别的选择吗?

ERC20:token 所有权属于合约,有较大作恶空间,且改进困难重重

在回答问题之前,首先需要清楚问题的原因。为什么 ERC20 智能合约会爆出如此严重的安全问题?

ERC20 旨在给智能合约的实现提供一个标准,让智能合约能够像那些有自己区块链的原生数字货币 (比如 Bitcoin、Ether) 一样具有发送、转账、查询余额等等类似功能,凡是实现了这套标准的智能合约都可称为ERC20 Token,之后将合约部署到以太坊,部署成功则表示成功发行了 ERC20 token。

实现 Token,除了 ERC20,我还有别的选择吗?

以上是一段以太坊 ERC20 中非常普遍的智能合约代码。这段代码,从业务逻辑上看似没有问题,但是在标注的地方,从上下文和去中心化控制特点来看,这段代码意味着:

  • 实际上 ERC20 token 是调用合约账户间接操作的,合约具有 Owner 特权,token 的所有权属于智能合约。也就是说 token 只是在合约中的一段数据,通过使用合约的Owner 特权,可以控制对整个项目产生的Token总量进行不受限制增发或毁灭式销毁所有Token操作;
  • 即使项目已经上线,并在运行中、众多Token持有人已经开始使用,同样会产生致命影响,无法使用。

由于 ERC20智能合约本身具有这种高危漏洞,使得黑客有很多作恶的空间。Bancor 的攻击事件,正是因为此漏洞导致的。

Bancor 主要合约包括 SmartToken 和 BancorConverter,分别为 ERC20 Token 合约以及与业务相关的 Token 转换交易合约。

本次 Bancor 平台被盗事件与 BancorConverter 合约有关,攻击者(黑客/内鬼)极有可能获取了 0x009bb5e9fcf28e5e601b7d0e9e821da6365d0a9c 账户的私钥。

而此账户正是转换token合约 BancorConverter(0x3839416bd0095d97bE9b354cBfB0F6807d4d609E)的 owner,同样拥有极高权限。owner 作为该合约的所有者和管理员,有唯一的权限通过 withdrawTokens() 方法提走合约中的全部 ERC20 Token 至任意地址。

另外以太坊自2014年开始发展,我们都知道一旦公有链开始运行,若想改变协议规则需要权衡各方利益,改进协议本身就会遇到各种阻碍,再加上作为以太坊社区资金的掌控者,以太坊基金会在管理上的不透明,也受到社区广泛诟病和质疑。更为严重的是,对于以太坊社区来说,基金会掌管的资金是不可持续的,一旦用完,将面临后续底层协议开发和升级无法为继的问题,因此针对 ERC20 标准协议的改进困难重重。

First-class Asset:token 所有权属于用户,给 token 赋予更多可能性

现在清楚了 ERC20:token 所有权属于合约,有较大作恶空间,且改进困难重重,那么回到刚才的问题:实现 Token,除了 ERC20,我还有别的选择吗?

答案是:First-class Asset。

First-class Asset 的概念实际上是从 First-class Function 引申而来。First-class Function是指函数式程序设计中,函数可以作为别的函数的参数、函数的返回值,赋值给变量或存储在数据结构中,它赋予函数式编程强大的能力。顾名思义,First-class Asset 就是指所有权是直接属于用户的,能够直接操作的加密资产。

在了解 First-class Asset 的实现之前,先要了解一些前提知识:区块链本质上是一台多复本的状态机。

状态机是计算机的一个基本模型,它可以分成两个部分:状态和操作。状态是指计算机里的数据;操作是指对数据进行的操作。而区块链中的许多的节点共同模拟了一台多复本的状态机。用户发出的签名交易包含了对状态机的操作,节点执行共识协议对所有操作进行排序,然后按共识排好的顺序执行操作,计算出新的状态。

因此区块链的不同之处则可以理解为实现状态机的状态模型不同。目前各种区块链使用的状态模型基本上是两种:UTXO模型和Account模型。

  • UTXO模型的代表是比特币,它的状态是当前所有UTXO的集合,一个UTXO可以简单理解为是一个比特币,是比特币的最小状态单元。而每个UTXO都通过一段锁脚本(lock script)记录了所有者是谁,同时保证只有此所有者才能花费这枚硬币,比特币的操作是通过脚本语言实现的,因为比特币脚本语言不是图灵完备的,没有条件判断语句,不能执行循环,也不会产生递归,所以其能力有限。因此 UTXO 模型虽然能够直接操作资产(Coin),但操作方式受限。
  • Account模型的代表是以太坊,以太坊是一个图灵完备的区块链系统,其虚拟机可运行智能合约,理论上能够解决所有可计算问题,它的状态模型的操作能力非常强大,然而 Account 模型的状态是基于 Account 构建的,Account是账户,可以是人(外部账户)或者智能合约(合约账户),所以操作对象是账户,而不是资产,用户定义ERC20 token,实际上是通过第三方也就是调用合约账户间接执行,token 的所有权属于合约,上文提到,这样一来有较大作恶空间且改进困难重重。

因此若想发行自定义的 token,基于比特币会非常困难,基于以太坊则有较大安全隐患。Nervos CKB 设计了一种与UTXO模型和Account模型完全不同的状态模型:Cell 模型。它能够支持实现 First-class Asset。Nervos CKB是一个由全球共识维护的状态库,它的最小状态单元是Cell,一个Cell中只有Capacity,Data,Lock以及Type四个字段:

  • capacity和Data共同表示一段存储空间,capacity是一个整数,表示这块空间有多大(以字节数为单位),data则是保存状态的地方,可以写入任意的一段字节。
  • lock表达的是这块存储空间的所有者是谁 - 只有能提供参数(例如签名)使得lock脚本成功执行的人,才能“更新”这个Cell中的状态。Type 可选,用于解锁 cell里 data值的修改。

实现 Token,除了 ERC20,我还有别的选择吗?

简单来说,一个 cell 实际上是一个属于所有者自己的存储空间,通过 lock 和 Type 可对这块空间进行操作,我们以在CKB 上发行 token为例(这里提供了一种实现方式):

1. 设计资产定义合约(Asset Definition),规定资产的主要约束(例如总数量,发行者,交易前后数量不变等)。

2. 保存合约代码到Asset Definition Cell中。

3. 在满足发行权限的情况下,发行者发行资产,并将资产状态保存在另外的State Cell中。State Cell的Type字段引用保存了资产定义的Code Cell,保证State Cell的变化受到资产定义的约束。

4. Asset Cell的持有者可以通过更新Lock来改变Asset Cell的所有者。

在这样的设计中,用户定义的资产是作为独立对象存在于系统中的,每一份资产都是一个Cell,每一份资产都拥有自己的标识符。Asset Definition Cell的所有者是资产的发行者,而Asset Cell是属于每个用户的。Asset Cell的授权逻辑和业务逻辑分离,所有权完全由自己的lock决定,与Asset Definition的逻辑无关,这意味着First-class Asset不是托管在资产发行者、开发者或是资产定义合约的手中,而是真正完全属于用户的,这也就意味着攻击者无法通过合约的Owner权限等方式攻击,作恶空间十分有限。

更进一步,data 是没有任何内部结构的,也就是这个空间中可存放任意数据。而且 Cell 支持任意的操作规则,包括读取自身Cell中保存的状态,以及引用和读取其它Cell中保存的状态等。通过 cell 模型用户可以给一个 cell 赋予任意状态并在此状态上进行任意操作。因此如果基于 CKB 定义加密资产,实现和操作加密资产的方式更加多样,拓展了加密资产的应用场景。

若想了解 First-class Asset 的更多细节,可查阅:

结语:Nervos CKB 提供区块链应用“野蛮生长”的土壤

坦白说,目前国内外对加密资产的监管趋严。彭博发布全球各国对于加密货币的监管态度,其中中国监管态度最为严苛,东南亚各国紧随其后。俄罗斯、美国、加拿大、巴西、澳大利亚、印度、日本、韩国、英国、德国、法国、南非等国家对于加密货币的监管态度适中,其余国家尚未建立相关监管。美国财政部或将加密货币地址列入制裁名单......虽然对于充斥着肆意投机、无脑梭哈、媒体诱导和暴涨暴跌的加密资产投资环境不利,然而也使市场趋于理性,越来越多的人把目光投向其背后技术。

Nervos CKB 的cell 模型突破现有区块链状态模型的局限,设计出了一种既简单又灵活的状态模型:cell 模型,实现的 First-class Asset 相当于用户获得了 CKB 中的一块土地,可以什么都不做,可以种一些植物,还可以建造一座摩天大楼,完全取决于自身的想象力,而人类的想象力可以超越宇宙的边界。相信在这样的“土壤”中,会有越来越多的区块链场景和应用得以“野蛮生长”,焕发生机。

我们对于一种新兴的技术,往往会在短期内对它有过高的不切实际的期望,泡沫破灭后,在长期的时间轴线上,又往往会忽视它的深刻影响,这一句话,用在区块链上,再合适不过。 就像狄更斯在《双城记》开头说的那样:

“这是最好的时代,这是最坏的时代;这是智慧的年代,这是愚蠢的年代;这是信仰的时期,这是怀疑的时期;这是光明的季节,这是黑暗的季节;这是希望之春,这是失望之冬;人们前面有着各样事物,人们前面一无所有;人们正在直登天堂,人们正在直下地狱。”

Ref:

本文来自,仅作分享,存在异议请联系平台删除。本文观点不代表刺猬财经 - 刺猬区块链资讯站立场。

(0)
上一篇 2019年9月25日 上午11:08
下一篇 2019年9月25日 上午11:30

相关推荐