EKT多链技术丨非同质化代币与非同质化多链

2019-04-02 16:47:16 浏览数 (1)

前言:公链是区块链发展的前提基础,也是区块链行业未来发展的核心保障。而目前区块链的发展现状是,底层公链的性能尚未发展起来,在其上构建的各类DApp严重受限于性能,各种共识算法都有不完美之处。以太坊(Ethereum)是一个建立在区块链技术之上, 去中心化应用平台。它允许任何人在平台中建立和使用通过区块链技术运行的去中心化应用。在以太坊上发行最广泛的即是同质化代币——ERC20 Token,作为一种预发行的通用代币,它构建了几乎市面上绝大多数通证经济的基础。而ERC721是以太坊智能合约更加完善的体现,它可以把各种不同特征的事物进行具象化定义,并求得完全非同质的解。本文将浅析同质化代币的抽象共识,非同质化代币的映射理念,并以此提出对于多链体系的非同质化构思。

【同质化代币】

很多开发者已经跃跃欲试参与到区块链开发事业当中,但往往会感到有点力不从心。因为公链的底层逻辑虽不复杂但也是一个浩大的工程,在公链/项目未上线前的人力物力成本也是十分巨大的。以太坊智能合约为区块链开发者们打开了新思路,他们通过构建一种同质化的token,非常轻松的就能将自己项目的权益预发放出去,同时获得早期的资金。

也许你经常看到ERC20和代币一同出现, ERC20是以太坊定义的一个代币标准。要求我们在实现代币的时候必须要遵守的协议,如指定代币名称、总量、实现代币交易函数等,只有支持了协议才能被以太坊钱包支持。

一个典型的ECR20代币有如下基础变量和函数:

name : 代币名称

symbol: 代币符号

decimals: 代币小数点位数,代币的最小单位, 18表示我们可以拥有 0.0000000000000000001单位个代币。

totalSupply() : 发行代币总量。

balanceOf(): 查看对应账号的代币余额。

transfer(): 实现代币交易,用于给用户发送代币(从我们的账户里)。

transferFrom(): 实现代币用户之间的交易。

allowance(): 控制代币的交易,如可交易账号及资产。

approve(): 允许用户可花费的代币数。

ERC20合约的TOKEN一直以来被视以一种单纯的链上资产来看待,它一直“活的”像是被映射在Ethereum上的Coin,而社群标签&价值共识是本来ERC20运行的一个深层含义。

形似余额但并不是为了度量余额,熟悉比特币和以太坊区别的朋友可能都会有所了解,ETH是账户机制的设计而BTCOIN是未花费输出的设计。从技术层狭义的理解就是重隐私性到侧重空间性能的不同,但是更深的一层哲学理解便是通货的度量和共识的度量。可以简单的说,UTXO模拟了掏出不同面值的货币并获得找零的流程,模拟了各式货币的流通(其中还有抽象的部分),应用在通货资产定义的比特币上非常的合适。而ETH的账户设计其实不能简单理解为我们最常联想到的您在银行里的那个账户,从普通人角度去看银行账户是一个管理自己存下来的钞票(未花费输出)的地方,而Ethereum的账户的非常重要的一部分意义其实是对每一个账户背后共识度量的集合。

在今年(2018年)4月至5月份,BEC、SMT等曝出的无限刷代币量漏洞,明显提升了大家对ERC20“资产”的认识,就是在合约中看见那个总供给量上限(TotalSupply)并不会真正限制前供给量(currentTotalSupply),这次事件中它们的当前供给量一飞冲天“直逼月球”。其实在以太坊上TotalSupply只起到了一个告知作用,对currentTotalSupply并没有强制的约束,这正是对通货度量和共识度量的区别的一个体现。度量通货则总攻击力必须要对当前供给量有绝对的限制,而度量共识则合约本身包括这份“告知书”就是共识的内容之一,"履约"并不是强制的因为"违约"也可以是共识。所有Token的持有者共同的认知,微妙的支撑着各种ERC20 Token的价值,持有者也便在悄然组成一个个或紧密或松散共识社群。

每一个ERC20 Token 持有者们就像是一个群,持有的份额分布正是从“群管理”到“群新人”的自治分布。对应的持有的Token越多与这个群体关系越紧密,相应的拥有更高的话语权,持有的越少越边缘,越相对事不关己,话语权也越微不足道。Erc20Token正是每一个社群的标签,共识价值与每一个成员都不同程度的息息相关,这种Token更是它的复合载体。

当然这并不是Erc20Token唯一胜任的事情,对于普通币民来说它们现在更多的是被视作一种仅仅是背着各种故事&用途的资产,像自己买的股票一样在交易所里面当码子使用。不过随着广大投资者的认知逐步提升,这其中更多的理解将被更广泛的接受,就像对各种Erc标准其术业更专攻的认识。譬如说现在更多的人知道有时锚定某一特定的事物,Erc721才是更好的选择。

【非同质化代币】

什么是ERC-721?现在我们看到的各种加密猫猫狗狗都是基于ERC-721创造出来的,每只都是一个独一无二的ERC-721代币,不过ERC-721在区块链世界远不止猫猫狗狗,它更大的想象空间在于将物理世界的资产映射到区块链上。

ERC721 是由Dieter Shirley 在2017年9月提出。Dieter Shirley 正是加密猫CryptoKitties背后的公司Axiom Zen的技术总监。因此加密猫也是第一个实现了ERC721 标准的去中心化应用。之前,该标准仍虽已被广泛使用,但在官方一直处于草稿阶段,直到6月,ERC721号提议才正式被以太坊作为标准接受。

那怎么理解非同质代币呢?非同质代表独一无二,以加密猫为例,每只猫都被赋予拥有基因,是独一无二的(一只猫就是一个NFTs),猫之间是不能置换的。这种独特性使得某些稀有猫具有收藏价值,也因此受到追捧。

ERC20代币是可置换的,且可细分为N份(1 = 10 * 0.1), 而ERC721的Token最小的单位为1,无法再分割。

如果同一个集合的两个物品具有不同的特征,这两个物品是非同质的,而同质是某个部分或数量可以被另一个同等部分或数量所代替。

非同质性其实广泛存在于我们的生活中,如图书馆的每一本,宠物商店的每一只宠物,歌手所演唱的歌曲,花店里不同的花等等,因此ERC721合约必定有广泛的应用场景。通过这样一个标准,也可建立跨功能的NFTs管理和销售平台(就像有支持ERC20的交易所和钱包一样),使生态更加强大。

ERC721最为一个合约标准,提供了在实现ERC721代币时必须要遵守的协议,要求每个ERC721标准合约需要实现ERC721及ERC165接口。

一个典型的ECR721代币有如下基础变量和函数:

balanceOf(): 返回由_owner 持有的NFTs的数量。

ownerOf(): 返回tokenId代币持有者的地址。

approve(): 授予地址_to具有_tokenId的控制权,方法成功后需触发Approval 事件。

setApprovalForAll(): 授予地址_operator具有所有NFTs的控制权,成功后需触发ApprovalForAll事件。

getApproved()、isApprovedForAll(): 用来查询授权。

safeTransferFrom(): 转移NFT所有权,一次成功的转移操作必须发起 Transer 事件。

ERC721定义的一些函数使其和ERC20代币标准存在一致的地方。这样做的目的在于更加方便现有钱包展示有关于代币的简单信息。这些函数使符合该标准的智能合约表现得像诸如比特币或以太坊之类的普通加密货币,方式在于定义使用户执行诸如将代币发送给其他人和核实账户余额等动作的函数。这些函数定义了合约处理代币所有权的方式以及转移所有权的方式。其中最值得注意的函数为takeOwnership和transfer,分别担任提取和发送功能,且对用户之间转移代币来说必不可少。

函数ownerOf返回某代币的所有者的地址。由于每个ERC721代币都是非同质且因此独一无二的,其在区块链上通过一个唯一的ID被查询。我们可以利用其ID判断代币的所有者。

函数approve批准或授予另一个实体代表所有者转移代币的权利。例如,如果Alice拥有1个MyNFT(我的非同质代币),她可以为朋友Bob调用 approve 函数。调用成功后,Bob稍后就可以代表Alice获得该代币的所有权或对该代币进行操作。关于所有权转移的更多内容可参见函数 takeOwnership 和 transfer 。

函数transfer,转移代币的下一个方法就是使用该函数。函数transfer让代币所有者将其代币发送给另一个用户,与独立加密货币类似。然而,只有收款账户事先被打款账户授予获得代币的权利,转账才能开始。

非同质化代除了表示你拥有某种东西,然后,这个所有权反过来能证明关于你自身的某个状态。可收藏的对象并不限于电子猫。人类一直以来有收藏东西的历史;这没什么新鲜的。从物理货币到神奇宝贝卡,人们喜爱收集。这是一种出于对稀缺物品的独特兴趣而形成的习惯。商品价值与其稀缺程度有关,与此类似的是,收藏物对于收藏者的价值与其和其它物品相比起来的稀罕程度相关。

比如,你参加某个社团活动,然后社团会给参与者一个token,然后,当你在自己的朋友圈晒这个token时,朋友圈里的任何人其实都可以通过区块链验证你是否拥有这个token,并且这也将是一个非常强烈的社交信号。且当这个社团的象征意义越大(比如哈佛大学的博士学位),或者在越来越多的人心中形成共识时,这个token所代表的信息量就越大和明确。

我们能够将以太坊代币看作稀有且具有收藏价值的物品,并且其中每个代币都遵循以太坊社区内被称为ERC721的标准。以太坊代币标准721,或称ERC721,是Dieter Shirley在2017年底引入的一项以太坊改进计划。这项提议标准让智能合约能够像ERC20一样按照可交易代币进行操作。ERC721代币是独一无二的,原因在于这些代币是非同质的。

再想想,其实我们的学位、信用额度是不是都有类似的功能?许多银行的信用卡额度都是据你所拥有的信用卡最高额度来审批给你的额度,现在也有许多单位会要求你出示芝麻信用分。如果你是某一产品或设备的极热Fans,比如音响设备、手表,你拥有东西本身,就同时在向接触到你的人传达了许多你特有的信息。

当你把所有的东西都平权化,所有人都拥有平等的接入某一个东西的权利,这时,每个人其实反过来是丧失了自己的个性化(这其实就是ERC20同质化token)。

所以,非同质化的token,是个人化的,个性化的,包含你自己独特人格烙印的东西。它可能成为现在这个时代的一种自我表达,这个自我表达比其他任何的语言和媒体更有分量、更有意义。

【EKT的思考】

“非同质” 本身是一个挺奇怪的概念。金钱和股份是同质化的。比如我有 500 块钱,我可以把里面的 100 块钱转给你,到底是转哪一部分的 100 块并不重要。但对一件 T 恤来说,你没办法这么做。所以,对钱和股份这些同质化的东西来说,唯一重要的是它的数量。

但生活中绝大部分的事物是非同质化的。你和我就是非同质化的。比特币一开始是解决钱的问题,所以大家可能就都往同质化的代币方向走。比如货币、股份、资产等等。那么,我们设想,有没有可能把一个公链体系做成既有既定框架,有一定体系,但又可以按需定制,独一无二的多链系统呢?

我们EKT的多链,采用“多链分而治之”的新方案重新设计了一个保障每个合约都能正常运行的公链,其中就使用到了一套非同质化的定制,拥有现成框架,且不可分割的多链构架。这一创新极大程度上简化了架构,降低了数据处理压力,确保一条链上流量激增不会影响到另一条链的效率,在链上进行的任何业务都不会收到其他业务干扰,有效实现了资源隔离。

其实EKT解决的一个核心问题是,目前Dapp的开发难度的问题如果使用以太坊的Solidity开发,需要学习以太坊的一整套逻辑,在复杂应用开发的时候需要考虑各种优化方案,同一个功能使用传统C/S结构一天写完的,用以太坊可能要写几周时间,对开发者来说很不友好。这一套流程若要Dapp/公链开发者写出来,势必在真正开发区块链功能之前就已经被这些繁琐但其实通用的步骤耗费过多精力和资源。

所以,这一点对所有其他搭建在区块链上的应用和产品都是一样的。比如我要是在区块链上做了一个Minecraft游戏,那么任何人也可以在Minecraft游戏上开发新的游戏。只要接入区块链,所有的游戏、所有的 dapp 就天然拥有了这种潜在的扩展能力和开放性。

默认就是拥有这种扩展能力的,这也是 dapp 最自然的开放理念。如果有人不希望有这种开放性的话,他完全可以通过自己搭建私有服务器的中心化的方式来做。区块链平台会为所有的应用统一提供这种开放性和可扩展性。在EKT中,坚持了这样一个理念,一个货币系统中不需要图灵完备的开发语言,不同的应用间尽可能实现隔离的原则。因此我们在设计的时候,把token的处理和DApp的处理分开了,也就是说在EKT上存在两种类型的链:token链和DApp链。

token链就是专门用于处理token交易的一条链,鉴于ERC20代币不断曝出的各种漏洞(虽然漏洞的产生是智能合约开发者的问题,但是我们认为是有更好的方案来实现的),在EKT上内置了token对象,开发者只需要定义自己要发的token的数量即可。另外,EKT的token链是一个多链多共识的结构,也就是说不同的token可以放在不同的token链上进行打包,多链并行极大提高交易处理速度。

EKT的DApp链是供不同开发者开发DApp的一条链。我们从智能合约开发语言、数据存储、效率三个方面进行了优化。EKT的DApp链基本上可以实现与现在的互联网应用相同甚至更快的开发速度,可实现的功能性也与互联网应用没有太大差异,最重要的是,我们可以实现大部分事件的1秒执行和确认,安全性要求比较高的事件可以实现3秒的确认。

EKT的中心思想就是设计一个社区的机制,让开发者可以轻易的开发一个可以承载DAPP的主链,其他的交给EKT来处理, EKT 的“一链一主币,多链多共识”的机制为后来的区块链项目开发提供了很大的便利,可以使用于任何区块链适用的应用场景。正如Dieter Shirley对erc 721 协议的定义一样,我们推出的多链只能是一个最低的标准。就是说,你可以认为一个产品最小化的版本是需要包括哪些功能的,然后你可以在上面衍生其他新的功能和新的玩法,如果你只有这些最小化的功能,那这个产品肯定就没什么意思了。

EKT 提供了一套底层的区块链机制,其他的区块链项目可以很容易的基于 EKT 的主链代码部署一套自己的主链,然后按照需求做一些定制化的设定,比如选择共识机制等。在EKT上编写的区块链项目将无需过于担心安全性问题,因为每一个接口都是非常简单并且在许多条并行主链上部署和运行的。部署主链时可以灵活的发行自己主链的代币以及选择共识算法。新部署的主链也可以加入到 EKT 多链技术的整个生态,共享 EKT 生态的用户资源,代币也可以和EKT 主币以及其他主链的代币进行交换和流通。

以上就是我对区块链同质化与非同质化思维的一些思考,和一些在设计EKT的多链多共识时对建设非同质化多链底层的考虑。欢迎大家提出疑问,共同探讨。

参考阅读:

20170119 区块链 - 比特币的共识机制

20171120 以太坊是什么

20180214教程 | 剖析 ERC721——了解非同质以太坊代币

20180414详解“多链多共识”机制

20180426 社群标签&价值共识-ERC20的一个深层的奥义

《EIP 721: Non-fungible token improvement proposal.》

《BTC whitepaper》

《EKT whitepaper》

0 人点赞