实现 token,除了 ERC20,我还有别的选择吗?
写在前面: 万向区块链周结束,我想大家或多或少能感受到区块链行业发生了一些变化, 就像橙皮书写的“区块链行业正在从华丽的盗梦空间回到现实的尘世” ,熙攘过后,越来越多的人冷静下来,这是好事,代表深入思考,深入研究的人多了起来,实际上,区块链还处于早期,唯一不变的就是变化。
以太坊 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。
以上是一段以太坊 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 可以简单理解为是一个面值不可分割的 Coin,对应一定数量的比特币,是比特币的最小状态单元。而每个 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 值的修改。
简单来说,一个 Cell 实际上是一个属于所有者自己的存储空间,通过 lock 和 Type 可对这块空间进行操作,我们以在 CKB 上发行 token 为例(这里提供了一种实现方式):
- 设计资产定义合约(Asset Definition),规定资产的主要约束(例如总数量,发行者,交易前后数量不变等)。
- 保存合约代码到 Asset Definition Cell中。
- 在满足发行权限的情况下,发行者发行资产,并将资产状态保存在另外的 State Cell 中。State Cell 的 Type 字段引用保存了资产定义的 Code Cell,保证 State Cell 的变化受到资产定义的约束。
- 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 的更多细节,可查阅:First-class Asset
结语:Nervos CKB 提供区块链应用“野蛮生长”的土壤
坦白说,目前国内外对加密资产的监管趋严。彭博发布全球各国对于加密货币的监管态度,其中中国监管态度最为严苛,东南亚各国紧随其后。俄罗斯、美国、加拿大、巴西、澳大利亚、印度、日本、韩国、英国、德国、法国、南非等国家对于加密货币的监管态度适中,其余国家尚未建立相关监管。虽然对于充斥着肆意投机、无脑梭哈、媒体诱导和暴涨暴跌的加密资产投资环境不利,然而也使市场趋于理性,越来越多的人把目光投向其背后技术。
Nervos CKB 的 Cell 模型突破现有区块链状态模型的局限,设计出了一种既简单又灵活的状态模型:Cell 模型,实现的 First-class Asset 相当于用户获得了 CKB 中的一块土地,可以什么都不做,可以种一些植物,还可以建造一座摩天大楼,完全取决于自身的想象力,而人类的想象力可以超越宇宙的边界。相信在这样的“土壤”中,会有越来越多的区块链场景和应用得以“野蛮生长”,焕发生机。
我们对于一种新兴的技术,往往会在短期内对它有过高的不切实际的期望,泡沫破灭后,在长期的时间轴线上,又往往会忽视它的深刻影响,这一句话,用在区块链上,再合适不过。 就像狄更斯在《双城记》开头说的那样:
“这是最好的时代,这是最坏的时代;这是智慧的年代,这是愚蠢的年代;这是信仰的时期,这是怀疑的时期;这是光明的季节,这是黑暗的季节;这是希望之春,这是失望之冬;人们前面有着各样事物,人们前面一无所有;人们正在直登天堂,人们正在直下地狱。”
Ref:
https://www.chaindd.com/3088379.html
https://www.dyqklw.com/article/20180715/9.html
https://www.jinse.com/bitcoin/214878.html
https://www.chainnews.com/articles/392731582780.htm