5. BTC 系列之数据存储

ETH 可以在交易构造之时直接使用data字段存储数据。BTC 存储数据有不同的方式

5.1. 背景介绍

  • dust : 构造交易时,一般认为当交易费用高 于 1/3 交易价值时,即可称作“Dust”或尘埃交易,目前而言,尘埃交易是指交易价值 低于 546 satoshis 比特币(即 0.000000546 BTC)的交易。

  • 标准交易和非标准交易

    在比特币中,最常见的交易形式为“鲍勃付爱丽丝(Bob pays Alice)”,它基于“付给公共密钥哈希P2PKH)”脚本,该脚本通过发送公钥和由以下人员创建的数字签名来解决:相应的私钥。P2PKH交易只是许多标准类别之一:如果交易通过了Bitcoin Core IsStandard()IsStandardTx()测试,则该交易为标准交易。但是,通过创建临时脚本来锁定(和解锁)交易,还可以生成非标准的脚本。交易,但仍可以广播和挖掘。

5.2. OP_RETURN

op_return 存储的最大字节数设置为83个字节(默认为80个字节,外加3个字节的开销)。

但一个BTC标准交易只能有一个 op_return 的输出。

5.3. OP_DROP

op_drop 运算符删除顶部堆栈元素。

5.3.1. P2SH 脚本

构造一个赎回脚本,锁定脚本为其 hash. 解锁脚本需要用这个赎回脚本去验证锁定脚本,同时保障赎回脚本通过。

  • 具体脚本

    赎回脚本  <OP_DUP OP_HASH160  0xca4159109e41b78863d23ceb5493e770cc53c6f4 OP_EQUALVERIFY OP_CHECKSIG>
    解锁脚本  <SIGN> <PUBKEY> <赎回脚本>
    锁定脚本  OP_HASH160 ebcc108d534d6bab12f9f657d29e9c982ea68453 OP_EQUAL
    
  • 解锁过程

    • 两个脚本经由两步实现组合。 首先,将赎回脚本与锁定脚本比对以确认其与哈希是否匹配:

      <OP_DUP OP_HASH160  0xca4159109e41b78863d23ceb5493e770cc53c6f4 OP_EQUALVERIFY OP_CHECKSIG> OP_HASH160 ebcc108d534d6bab12f9f657d29e9c982ea68453 OP_EQUAL
      
    • 假如赎回脚本与哈希匹配,解锁脚本会被执行以释放赎回脚本

      <SIGN> <PUBKEY> OP_DUP OP_HASH160  0xca4159109e41b78863d23ceb5493e770cc53c6f4 OP_EQUALVERIFY OP_CHECKSIG
      

5.3.2. OP_DROP 存储数据

利用 P2SH 脚本,先构造一个由 OP_DROP 和 P2PKH 组合成的赎回脚本。

赎回脚本  <OP_DROP OP_DUP OP_HASH160 <PUBKEY>  OP_EQUALVERIFY OP_CHECKSIG>
解锁脚本  <SIGN> <PUBKEY> <DATA> <赎回脚本>
锁定脚本  OP_HASH160 <RedeemScriptHash> OP_EQUAL

具体解锁过程如下:

  • 首先,将赎回脚本与锁定脚本比对以确认其与哈希是否匹配

<OP_DROP OP_DUP OP_HASH160 <PUBKEY>  OP_EQUALVERIFY OP_CHECKSIG> OP_HASH160 <RedeemScriptHash> OP_EQUAL
  • 执行解锁脚本. 上链数据,存储在 Data 字段,这样第一个字段就会被丢弃

    <SIGN> <PUBKEY> <Data > OP_DROP OP_DUP OP_HASH160  <PUBKEY Hash> OP_EQUALVERIFY OP_CHECKSIG
    

5.4. 难题和进度

5.4.1. OP_RETURN

每笔交易unlock 2 条 burn tx 记录。 因为 burn tx hash 长度为32,能容纳 2笔。

目前构造的交易 size 大小为 449 byte,按照100聪左右的手续费率,大概每笔 unlock 需要 0.00044900 BTC (蛮贵的)

5.4.2. P2SH + OP_DROP

看论文大概能存储 1500左右 字节 的数据

  • 多签 unlock 地址会变更,目前尚未测试多签 + op_drop

目前本地构造的交易,赎回脚本和锁定脚本OK了,但是解锁脚本尚未通过签名验证

5.4.3. OP_DROP + P2PKH

解锁脚本  <SIGN> <PUBKEY> <DATA> 
锁定脚本  OP_DROP OP_DUP OP_HASH160 <PUBKEY>  OP_EQUALVERIFY OP_CHECKSIG

属于非标准交易,目前尚未找到使矿工节点忽略标准检查,打包非标准交易的方法。

5.5. Reference