Simple Ledger——BCH上的另一种token方案
BCH 近期的 token 方案已经有了虫洞和 Keoken 。严格来说,虫洞和 Keoken 是智能合约平台, token 只是其中的一部分功能。今天再介绍一个单纯的的 BCH token 方案: Simple Ledger Protocol ( SLP ) 。
该协议由 Jonald Fyookball ( Electron Cash 钱包开发者、 ChainBet 协议撰写者), James Cramer , Unwriter ( bitdb.network 开发者), Mark B. Lundeberg , Calin Culianu , Ryan X. Charles ( Yours.org CEO )共同撰写。
原理
SLP的基本原理比较简单,就是把token的发行和转账等信息写入OP_RETURN中,携带在BCH转账中来实现token在不同地址间的转移。
以UTXO方式记录token余额
虫洞、Keoken和SLP都复用了BCH的地址。不同的是虫洞和Keoken都是账户制,类似以太坊。而SLP则使用和比特币一样的UTXO方式来记录token余额。
四种命令
-
创世转账(Genesis Transaction):INIT
相当于Token的发行,会携带token的缩写、全名、数量、小数点位数等关键参数。这类转账表示给目标地址发行了一定数量的token。这笔转账的txid就是这个token的唯一编号,称为token ID。
创世转账还有一个参数叫做 baton vout 。有这个参数,就表示token可以增发,否则token数量固定,不能增发。baton vout参数表示创世转账中的哪个output在以后可以作为input进行增发转账。
-
增发转账(Minting Transaction):MINT
根据第一点的描述,以创世转账中baton vout参数标记的output为本次转账的输入,携带token ID、增发数量等参数,可以给目标地址增发一定数量的token。
增发转账中也可以携带baton vout参数,表示下一次增发时用哪个UTXO作为input。同样,如果没有这个参数,就表示token不能再被增发。
-
普通转账(Transfer Transaction):TRAN
这种转账就是像转BCH一样,把token从某些地址转向另一些地址。携带的主要参数有:token ID、给每个output的token数量。因为余额是UTXO制,所以所有的input中的token都会被花掉,一部分转给别人,剩下的转给自己的找零地址。
-
校验证明转账(Checksum Commitment Transaction):COMM
严格来说这并不是一笔转账,更像是这个token的转账证明。原理上就是把token的历史转账Hash成一棵Merkle树。这个技术让钱包收到转账时,可以不必回溯整个转账历史来校验该笔转账的合法性,提高钱包校验转账合法性的效率。
这种类型的转账是由token的发行方来定期发布,所以input的地址要与创世转账的input地址相同,以此证明这是由token发行方来发布的。
转账校验安全模型
根据上一节的描述,我们大概可以在推断出,一种token的所有转账构成了像下面这样的一个有向无环图(DAG)。
因为BCH的矿工是不会对token进行双花等安全检测的,一笔凭空伪造出来的token转账也可以以合法的SLP格式被写到区块链上。比如:我的地址明明没有某个token,但我可以伪造一笔转账,从我的地址转出10个token给张三。张三的钱包就需要通过回溯这笔转账之前的相关转账来检验这个转账是否合法。如上图所示,如果无法回溯到创世转账,那么说明这笔转账是伪造的。
当钱包校验一笔转账是否合法时,有如下几种校验方式,也代表了四种不同的安全模型。
-
完全自验证(Full self-validation)
钱包从被校验的转账开始,回溯之前所有与之相关的转账,一直回溯到创世转账,如果整个路径上没有问题,那么就说明这笔转账是有效的。
这种方式的校验足够彻底,所以足够安全。但因为路径可能会很长,所以会消耗较多计算资源。
-
基于检查点的验证(Checkpoint based validation)
从当前转账开始,回溯到最近一个该token的 校验证明转账 ,如果这个路径没问题,则转账有效。这种转账校验可以让校验路径变短,计算量比较小。
这种方式需要信任 校验证明转账 。因为校验证明转账是由token发行方发布的,发行方没有理由造假,再加上转账数据是公开的,如果有问题会很快被发现,所以这种信任的风险并不大。
-
部分自验证(Limited self-validation)
这种方式类似全部自验证,但只回溯部分转账。校验需要的计算量会比较小,但风险较大,因为伪造者可能会精心布置一个较长路径的转账链,让转账在回溯路径内看上去是合法的,以此欺骗使用部分自验证模式的钱包。
新地址格式
如果支持SLP的token转到了一个不支持SLP的钱包,那么接受者可能会在转BCH时把token也一起误转出去。为了避免这样的问题出现,SLP使用了新的地址格式SLP Addr。
新增地址格式并不改变共识,只需要钱包、交易所等基础设施支持即可。并且,通过地址转换工具,也可以给老地址转token。
进展
目前协议已经基本完成,开发者正准备将该token方案集成到Electron Cash钱包上。