首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

把数据写入BCH链的方法汇总

方法列表

在输出脚本中插入数据

OP_RETURN

OP_RETURN是最常用的,也是协议标准的数据写入方法。memo就是基于这种方法实现的。文章写作时的BCH协议规定,每个TX只能携带一个OP_RETURN输出,每个OP_RETURN最多携带220字节的数据。

协议规定OP_RETURN不是UTXO,也就不会造成全网UTXO的膨胀。

P2FKH

Pay to Fake Key Hash

我们都知道一个P2PKH的输出脚本的格式是这样的:。在早期没有OP_RETURN的时候,为了把数据存入到区块链中,有人就用pubKeyHash这20字节来存储数据。也就是说,输出脚本中的pubKeyHash是个假的公钥Hash,这也是Fake Key Hash的由来。

从网络节点来看,这是正常的输出,所以这种输出是UTXO,又因为这里的pubKeyHash其实是数据,找不到与之对应的私钥,所以这样的UTXO是永远不会被花掉的,会导致UTXO的膨胀。

因为一个转账可以有多个输出,所以一笔转账可以携带多组20字节的数据,不像OP_RETURN那样只能携带一组。所以用这种方式,一个转账可以携带更多数据。但成本上还要考虑最小转账数额的限制,相当于每个输出都要把最小转账数额的币燃烧掉。

P2FK

Pay to Fake public Key

P2PK的输出脚本格式为,把publick key换成了要存储的数据。方法和优缺点同F2FKH方式。

因为不压缩的公钥有65字节,并且P2PK脚本比P2PKH脚本少三个op code,所以P2FK方式比P2FKH方式的存储成本低一点。

P2FMS

Pay to Fake Multisig

非P2SH的Multi-Signature转账中的输出脚本是这样的:,其中N不能超过3,超过3的话需要用P2SH方式来实现。

如果你看懂了P2FKH和P2FK的插入数据方法,你就会知道P2FMS的方式是从脚本中的Public Key上打的主意。P2FMS方式用1/3签名脚本,其中两个Public Key其实是数据,第三个Public Key才是真正的Public Key。每个非压缩的public key是65字节,也就是说每个输出脚本可以插入130个字节的数据。一笔转账可以有多个输出脚本,所以可以携带多段130字节的数据。

P2FMS的输出是可以被花掉的,因为其中有个一public key是真的公钥,用对应的私钥对转账做签名就可以把输出花掉。所以这种方式不会造成UTXO膨胀。

P2FSH

Pay to Fake Script Hash

P2SH的脚本输出格式为,把script hash换成要存储的数据。方法和优缺点同P2FKH方式。

P2PKH脚本比P2PKH脚本少两个op code,所以存储成本比P2FKH方式略低。

在输入脚本中插入数据

人民群众的脑洞还是很大的,想到了在输入脚本中存数据。实施这种方法一般需要两步:

先构造一个P2SH的输出

用输入脚本把这个P2SH输出花掉,在花掉输出时将数据插入输入脚本中

输入脚本格式:,其中data1、data2、data3就是要插入的数据。

根据比特币脚本限制,进栈数据最大为520字节,同时不能超过输入脚本的最大长度,该方式可以插入的数据量和详细格式如下图:

这种方式不会造成UTXO膨胀。在一条转账中也可以携带多条输入脚本来插入数据。

思考

插入到UTXO中的数据,造成了UTXO膨胀。但数据不在UTXO里,最终数据是否会被全网裁减掉(比如UTXO commitment实现后)?bitdb.network为解决这个矛盾提供了一个思路:把区块链中的插入数据单独提出来做成一种服务,如果有人需要用这种服务,那么就会给这类服务提供激励,那么服务提供者就会有动力长期保存这类数据。

参考

Data Insertion in Bitcoin's BlockchainAndrew Sward, Ivy Vecna, Forrest Stonedahl

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20180731B1WWCH00?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券