使用 OP_RETURN 完成简单跨链

OP_RETURN 介绍

每一笔 UTXO 的交易都由 input 和 output 构成,output 中会包含该笔输出的解锁条件(谜题)。

{
    "txid": "0af0df159b0c111614e63b67f8c6d1d16cbbd58d0875725abd4ba1b1de13c1a6",
    "txhash": "ee901818a1195f02759258aa21053a775e08c02a74a70262b2ef9995e7407c64",
    "version": 1,
    "locktime": 0,
    "expire": 0,
    "vin": [
        {
            "txid": "8b43b1b1c0bda2f918f3a45118e5e34d4af0bf4704db8abb82e357457e31d4e7",
            "vout": 0,
            "sequence": 4294967295,
            "amountin": 0,
            "blockheight": 0,
            "txindex": 0,
            "scriptSig": {
                "asm": "...",
                "hex":  "..."
            }
        }
    ],
    "vout": [
        {
            "amount": 1000000000,
            "scriptPubKey": {
                "asm": "OP_HASH160 d1b5935eab6f36ad353ec4ee5b57ca7ecb4c0f68 OP_EQUAL",
                "hex": "a914d1b5935eab6f36ad353ec4ee5b57ca7ecb4c0f6887",
                "reqSigs": 1,
                "type": "scripthash",
                "addresses": [
                    "RSWWFcdscckSsHFpgAMUXJExwZZVbPAwTEp"
                ]
            }
        },
        {
            "amount": 199900000,
            "scriptPubKey": {
                "asm": "OP_DUP OP_HASH160 44d959afb6db4ad730a6e2c0daf46ceeb98c53a0 OP_EQUALVERIFY OP_CHECKSIG",
                "hex": "76a91444d959afb6db4ad730a6e2c0daf46ceeb98c53a088ac",
                "reqSigs": 1,
                "type": "pubkeyhash",
                "addresses": [
                    "RmCYoUMqKZopUkai2YhUFHR9UeqjeyjTAgW"
                ]
            }
        }
    ],
    "blockheight": 0,
    "confirmations": 0
}

如交易 0af0df159b0c111614e63b67f8c6d1d16cbbd58d0875725abd4ba1b1de13c1a6 中的 vout[0] 的 scriptPubKey 字段中包含了解锁合约。

但实际上我们可以让一个 vout 的输出为 OP_RETURN .... ,则该笔输出无法被花费,OP_RETURN 表示后面可以记录我们想记录的任何信息,当然为了保证交易大小的使用效率,我们会限制该字段长度。

当我们要创建一笔跨链交易时,如我们想使用 MEER 换取 ETH,可以将 ETH 接收地址放入 OP_RETURN 字段中,创建一笔输出,并发送到承兑商账户,承兑商将 ETH 发送到 OP_RETURN 中的接收地址,这样便可以完成一次简单跨链。