Taproot Asset 快速上手体验

Created on Oct 20, 2023

参考学习

安装与配置

简单的 mint transfer test

下面我将使用 Polar 测试 Taproot asset, 测试网络结构如下:

  • Alice Mint 10000 个 代币 “token 2”
    • cli: `tapcli assets mint –type normal –name token2 –supply 10000
    • 资产root 如下:
		{
            "version": "ASSET_VERSION_V0",
            "asset_genesis": {
                "genesis_point": "f4d4e47e5cfd62a8622711611eb93912ea87745e8c38c9e69db5f6d4aaf8f6a5:2",
                "name": "token2",
                "meta_hash": "0000000000000000000000000000000000000000000000000000000000000000",
                "asset_id": "23e7e86156494e1d2dc9145592e2d6cdc770ebdde225d88328e91041b3d9f097",
                "output_index": 0,
                "version": 0
            },
            "asset_type": "NORMAL",
            "amount": "10000",
            "lock_time": 0,
            "relative_lock_time": 0,
            "script_version": 0,
            "script_key": "0230daab2a93af3da911cb2be1ba5ee5e8aa0d4027b993f142cbffb0844a8f8327",
            "script_key_is_local": true,
            "asset_group": null,
            "chain_anchor": {
                "anchor_tx": "02000000000101a5f6f8aad4f6b59de6c9388c5e7487ea1239b91e61112762a862fd5c7ee4d4f40200000000ffffffff02e803000000000000225120d91026b1a909e791552fe5ef364ebeee5c63ca2f55106b2c6582b10c4bc792576a36030000000000225120359c5ea0a019c6bd28b035cdd82c47a20b0e62ce8381238a0b4644c18c47325e0140a3e378b6af1117c1dcc6e582c088933c41f867b58ec1bda8bf7f3dbf50c8c8147c7310e441b894d43ca693ace999ee6eb7a3d0be26148874f48f882c7da8440600000000",
                "anchor_txid": "658a897735b41375ed57d7b185077101b2b269d73c068bfcf2c2298516a20cb6",
                "anchor_block_hash": "0000000000000000000000000000000000000000000000000000000000000000",
                "anchor_outpoint": "658a897735b41375ed57d7b185077101b2b269d73c068bfcf2c2298516a20cb6:0",
                "internal_key": "03d9a9a6452b3040f22bafda6a80bb3c9fd9a26cca54e233968eeb5798a3a6e649",
                "merkle_root": "30f22527514d67fe95f8056b881a71560cd6adf67cc5a23942332068236e47ab",
                "tapscript_sibling": "",
                "block_height": 0
            },
            "prev_witnesses": [],
            "is_spent": false,
            "lease_owner": "",
            "lease_expiry": "0",
            "is_burn": false
        }
  • Finalize 新 mint 的 token: tapcli assets list
    • 这是我们使用 btc-expoler 看一下 mempool, 发现有一笔新的交易 658a897735b41375ed57d7b185077101b2b269d73c068bfcf2c2298516a20cb6
    • 此时区块高度为 170, 现在我们控制 bitcoin core 结点再挖6个块把该 mint 交易 finalize 一下.
    • 可见上面那个交易在 171 高度被打包, 此时相当于结点 alice 在链上打了 “我 alice 刚刚在 taro 合约当中发布了10000个 token2” 的 commitment.
  • 此时 bob 仍然不知道 alice mint 了一个新的 token “token2”, bob 必须要通过 alice sync 同步才知道, bob 从 alice 处获得 token 的基本信息同时在链上验证该 token 相关信息是否被 commit 了
  • 现在 bob 想要 alice 向 bob 发送 100 “token2” , bob 需要生成一个新的地址, taprt1qqqsqqspqqzzqgl8aps4vj2wr5kuj9z4jt3ddnw8wr4amc39mzpj36gsgxeanuyhqcssykxk8pfl6gkcr4jdl0lv8vzwqdqma75jglh6q6cr3nvmmv0q5xlgpqss98a2p0lnwa8nrv9avs25g4c6zcahuhxzmg382a62wste3mvem4evpgqkgrp0dpshx6rdv95kcw309akkz6tvvfhhstn5v4ex66twv9kzumrfva58gmnfdenjuar0v3shjw35xsesss5gky
  • alice 向该地址发送, 此时会触发一笔链上交易, 该交易在 177 高度被打包
    • 该交易把之前的状态 commitment 转移到新的 3 个 utxo 里面
  • 上链之后, bob 可以判断自己有了 100 个 “token2”:
tap@bob-tap:/$ tapcli assets list | grep -12 token2
                "block_height": 0
            },
            "prev_witnesses": [],
            "is_spent": false,
            "lease_owner": "",
            "lease_expiry": "0",
            "is_burn": false
        },
        {
            "version": "ASSET_VERSION_V0",
            "asset_genesis": {
                "genesis_point": "f4d4e47e5cfd62a8622711611eb93912ea87745e8c38c9e69db5f6d4aaf8f6a5:2",
                "name": "token2",
                "meta_hash": "0000000000000000000000000000000000000000000000000000000000000000",
                "asset_id": "23e7e86156494e1d2dc9145592e2d6cdc770ebdde225d88328e91041b3d9f097",
                "output_index": 0,
                "version": 0
            },
            "asset_type": "NORMAL",
            "amount": "100",
            "lock_time": 0,
            "relative_lock_time": 0,
            "script_version": 0,
            "script_key": "0258d63853fd22d81d64dfbfec3b04e0341befa9247efa06b038cd9bdb1e0a1be8",
            "script_key_is_local": true,
  • 以上只是对 taproot asset protocol 的简单操作, 更多操作读者可以自己动手玩玩.

总结

  • Taproot asset 仍是使用传统 bitcoin 扩展思路, 即在链上对状态进行commit(承诺), 链下完成计算, 链下用户结合链上链下信息共同校验.
  • Taproot asset 服务的 avaliability 仍然依赖资产的中心化发行方或是其他维护结点, 用户需要在链下获得资产状态.
  • Taproot asset 同样可以利用 payment channel 的思想, 在通道里面支付, 链上在结算, 有意思的是可以把多种资产的 channel 组合使用. 就是资产碎片化可能是个大问题
  • Taproot asset 资产的有效性也是完全依赖于资产的发行方, 一旦发行方出问题, 你的 token 也只是一个数字, 链上的 commitment 更没有任何意义. 换句话说, Taproot asset 资产存储价值仍然在链下, taproot asset 协议不托管资产, 只是提供"托管你在发行方那里托管资产的凭证"的服务, 并使用 bitcoin 保证你托管凭证的安全. 说人话就是 Taproot asset protocol 让你在发行/使用被 bitcoin “保护” 的同质化代币和NFT. 个人用户想发行的话需要实时跑台服务器, 不像erc20, taproot asset 你不维护状态就没有了.

展望

  • 肯定有狗庄在上面发行各种 shitcoin, nft 割韭菜.
  • 某个法律实体开始在上面发行实体资产的凭证, 各种 USDx, 股票, 证券国债等等. 这些主要的风险是发行方跑路还有监管, 尤其要考虑到对中转结点的监管风险.