基于BCH的新Token方案SLP的原理与应用

BCH社区  2019-04-22  BCH/比特币现金(Bitcoin Cash)栏目  
点击上方“ IFWallet” 关注我们

  2017年,ETH催生了一套Token体系,Token得到广泛应用,一年有几千个币种上线交易所,从而造就了一波牛市。到目前为止,数字货币,除了当做转账工具,如跨国转账,现金收款等,还有另外一个用途就是——炒作,因为数字货币天然带着一些证券的特性。而各种募币的活动,使得Token的应用变得更加广泛。然而,除了作为证券进行炒作,Token可以拥有更加好的应用场景,譬如投票选举、身份凭证、各种票券等等。

      

  目前,Token有两大实践,一个是基于ETH的ERC20和ERC721的各种Token,无论是初创公司众筹,还是公链项目启动,他们都会先搞个Token,然后上线到交易所;另外一个是基于BTC的稳定币USDT,它是稳定币中体量最大的,目前市值都能达到21亿美金,后来也有人在ETH上发布了各种稳定币,如TUSD,USDC等,体量也不小。故而ICO及稳定币,是目前Token的两大实践。

  那么两个实践的体验如何呢?ETH上的Token,首先对于开发者来说,它是足够强大的,有成熟的工具和方案去部署及管理Token,但是也因为安全问题而受到诟病。对于用户来说,进行一笔Token的转账是很方便的,到账迅速,但是要付出一笔约0.001ETH的手续费,具体多少取决于ETH的拥堵程度,有时候手续费甚至比转移的Token值钱。

  BTC上的Token,这里指USDT稳定币,对于开发者来说,它的模式不易被复制,因为它的实现方案略微复杂,需要做许多的定制开发,才能搭建起这套Token系统,USDT由其公司Tether专门维护,也依赖于各个交易所、钱包的支持。用户进行一笔转账,到账时间取决于BTC出块时间,平均10分钟,还要视付出的手续费而定。转移一笔USDT,一般需要付出0.0008BTC,拥堵的时候需要更多。

  
其实,从上面的分析,我们得知,ETH、USDT上的Token体验并不太好,很贵,甚至会慢。由此,也能一窥ETH的性能问题,和BTC不扩容的弊端。而人们尚未切换到新的方案上去,一是因为这样的方案还没有诞生或者成熟,二是因为迁移成本太高。只有某一天,能非常轻松切换到另外一条链,并且能够获得非常好的体验之后,让用户尝到甜头,人们才会迁移。

  而BCH是一条和BTC分道扬镳,探索大区块方向,费用低廉,体验良好的公链,在其上,进行过许多的Token方案探讨,例如Wormhole、bitcointoken、OP_GROUP等等,然而我们今天的主角——SLP,是其中一个明星,下面我们重点讲讲SLP的设计和原理。

  SLP是什么?

  SLP是一种Token方案,在不改变底层链的共识机制情况下,通过OP_RETURN上附带元数据,结合交易中的UTXO,而构建的一个Token系统,这些特殊交易,就代表着Token流转,存储着Token的UTXO和BCH的UTXO一样,花完就没了。

  由于SLP是基于UTXO模型的,故而可以做到迅速到账,交易本身支持SPV简易交易验证,当然关于Token转移的合法性,还需要进一步的验证。

  Token方案的演变

  其实很早以前,在只有BTC和山寨币的时候,人们就考虑过,给BTC染色,从而能够把这个币赋予特殊用途。后来出了许多方案,例如ColoredCoin,Counterparty等,逐渐都销声匿迹了,只有Omni还在继续使用,后来又逐渐有其它方案,例如RSK、OP_GROUP等,但是都因为太过复杂,或者修改起来会触碰共识,从而难以推行。如下图,我们可以看到各种Token方案的原理和复杂程度:

  后来人们发现,在OP_RETURN上,包含一些元数据是可行的做法,里面描述了Token的信息,这就是Omni方案。包括Wormhole也是这么做的,发行Token时,在OP_RETURN里面嵌入特定的字段,如名称、发行总量、网站地址等等信息,然后发行的Token会归入到输出的某个地址里面。我们可以看到,Token的方案,其实是朝着一个越来越灵活,但是却又越来越简单可靠的方向发展,太过复杂的Token方案,不仅难以实现,还难以得到用户的认可。只有足够简单,又灵活实用的方案,才能得到发展。

  SLP的原理

  SLP的原理,其实并不复杂,和Omni、Wormhole方案类似,比较大的区别在于,Omni是账户制的,无法进行简单验证,必须等待比特币网络的确认,试想一下,如果不要求确认,那么OP_RETURN上的信息可以随意捏造,接受未经过网络打包确认的Token,则是危险的。而SLP是可以通过交易之间构建的DAG,来确定一笔Token交易的合法性。

  SLP的OP_RETURN元数据,在协议中有详细的规定,对于不同的交易类型,里面放上不同的字段。总体上,有两个规则:1. OP_RETURN要放在交易的第一个输出 2. 元数据协议用四字节的Lokad_id "SLP\x00"来标记该交易是一个SLP Token交易

  SLP理论上,可以定义很多种的Token类型,目前协议说明里,只定义了一种类型,那就是无许可的Token,类型编号是1,其它类型编号被保留起来,用于证券、投票、票据等Token。

  SLP的交易类型

  SLP类型1无许可Token里面,有以下四种交易类型,分别是:1. Token创世交易 2. Token增发交易 3. Token发送交易 4. 发行者检查点交易

  无许可Token创世交易

  无许可的Token创世交易,是创建Token的一笔交易,这笔交易里面,定义了Token的基本属性,包括 token类型、token标识、token名称、token的网站、精度等等。

  输入,可以是任意个数的UTXO。输出,必须按照下面的规则来组织:

  除了一些基本属性,还有两个东西比较重要,那就是第1个输出(从第0个计起),接收Token的全部发行数量,Token发行后,就存储在这个UTXO里面;此外,OP_RETURN里面,还指定了增发的接力棒位置, 如果接力棒是N,那么第N个输出,可以用于增发Token,当然,也可以设置为一个不存在的输出,这样就人为丢弃了接力棒,这个Token的数量就固定了。

  无许可Token增发交易

  无许可的Token增发交易,是指增发Token时,发送到网络中的一笔交易。这笔交易,定义了对某个Token增发的量,以及把增发的接力棒传给哪个输出。输入,可以是任意UTXO,但是必须包含一个增发接力棒的UTXO。输出,按照下面的规则来组织:

  这个交易,是直接依赖于增发接力棒的,如果没有这个接力棒,那么这笔交易则是无效的。

  无许可Token发送交易

  Token最常见的操作,就是发送了,使用、转让Token,都是通过发送这个动作来完成。SLP的发送方法很简单,就是把相应的有Token权益的UTXO花费出去,输出到 另外一个地址上即可。输入,可以是任意的UTXO,但是必须包含一个以上的有元数据上指定Token余额的UTXO。输出,按照下面的规定来组织:

  由于继承了UTXO的特性,故而可以一次性给多个地址发送Token,前提是输入的Token要足够。如果输入的Token不足支付,那这笔交易就是非法的,此外, 如果声明的输出个数,大于真实的输出个数,说明有的Token数量没有对应真实的输出,那么这笔Token就被销毁掉了。

  以上几种交易都需要符合规则,才能被其它节点接纳,所有节点都以这个规则作为共识。总的原则其实只有以下几项:1. SLP运行在BCH上,需要维护一套额外的共识,这套共识存在于各个服务商之间 2. 所有的UTXO,遵循已有的BCH共识,可以当做普通的币来花费 3. Token发行后,有一个TokenID,是创世交易时的TXID,它唯一标识了一个Token 4. 存在含有Token的UTXO和含有发行权的UTXO,发行权通过接力棒来传递 5. 构造的各类交易,其元数据要根据规则填写,并且和UTXO的情况匹配或兼容。

  根据以上的规则,其实我们可以根据Token的交易构建出一个DAG(有向无环图),如下图所示:

  通过有限回溯或者完全回溯,就能够验证交易的有效性。故而钱包、区块浏览器等服务,需要做的就是不断跟踪区块链上的交易,构建这么一个DAG图,从而能够验证Token的 各项操作是否有效,进而更新Token的持有状态,可喜的是,已经有开发者发布了SLPDB、SLP-SDK等基础工具,降低了开发门槛。

  总的来说,所谓的Token系统,就是一个状态表,而SLP,选择通过普通的BCH交易来表达和驱动这个状态的变化。所有参与者,根据规则解析出的最终结果,就是最终的Token状态。

  一些注意事项

  SLP作为一个Token方案,申请了一个独立的SLIP的币种编号245,那么,为什么要采用一个新的SLIP编码呢?我想是因为它使用了UTXO模型,新的SLIP编码,可以让它的地址管理和已有的BCH隔离开,避免UTXO管理上的混乱,出现将含有Token的币给花掉的问题。这也提醒我们,对于SLP相关的UTXO,要做特殊的标记,当它含有Token时,要提醒用户不要误将有Token的UTXO给花费掉。事实上,也存在需要给SLP地址充值BCH的情况,故而不应该做绝对的隔离,这样的做法是合理的。

  此外,SLP还设计了一个新的地址,用于接收Token。主要目的也是为了避免用户将BCH充到SLP的地址上,但是因为SLP的交易,需要花费BCH,故而还是有必要在两种地址格式之间做一个转换, 这样用户才能往SLP地址转币。

  UTXO的底层无差别,带Token的UTXO之间有差别,以及不同的地址格式转换,这样的设计的确会给用户及开发者带来困扰。采用UTXO模型这样的设计,虽然得到了Token收发体验上的好处,但是缺点也很明显, 那就是要承受一部分的困扰。

  SLP的基础设施

  目前,已经有一些基础的项目支持SLP,我们主要从钱包、浏览器、交易所等方面来看。

  钱包

  目前仅有 Electron Cash 钱包支持了SLP,他们推出了一个SLP版本,它是一个SPV钱包,能够支持SLP Token的创建和收发。除此之外,Bitcoin.com也发布了一款叫做Badger的浏览器插件钱包,可以很方便地收发SLP,笔者真实体验过,从EC发送Token至Badger,一秒到账。

  

  浏览器

  目前SLP有一个官方的浏览器simpleledger.info,可以查看到各种Token的情况,包括发行时的基本信息,以及流通情况、交易列表、当前状态等。整个浏览器是基于SLPDB实现的,体验还是挺不错的,已经开源于GitHub上。

  交易所

  已经有一家交易所宣布支持BCH和SLP的Token了,目前已经上架了一个基于SLP的Token——LLM,是一个叫做Liberland的私人国家发行的法定货币。

  

  展望

  SLP的诞生,是借鉴了过往各种Token方案的结果,现实世界中的证券、股票、投票、票券等应用场景非常复杂,SLP能否满足这些需求,现在还不能得出结论。但是SLP相比之下,的确是一个较好的方案,它足够简单,而且使用体验较好,比起ETH的ERC20,及BTC上的Omni,有一定的优势。而Token方案的广泛应用,还需要更多的努力,去发现合适的应用场景,然后加以实践,目前SLP的交易量在稳步增长,让我们拭目以待。

  下载IFWallet,了解更多新鲜资讯

  「下载方式」

  

   iOS用户前往APP STOre 进行下载,

  点击以下链接可查看下载指南:

   iOS版本下载指南

  Android用户请扫描下方二维码进行下载:

  长按二维码关注

版权信息
作者:Bibodeng
来源:BCH社区

关于我们

联系我们

作者进驻

手机版

Copyright © 2013 比特巴 www.btb8.com
始建于2013年,提供比特币 区块链及数字货币新闻、技术教程、测评、项目周报、人物等资讯
本页面提供的是BCH新闻资讯,比特现金是从比特币分叉而来,并与比特币形成竞争关系,它是比特币社区选择的另外一条道路。