Taproot Asset 快速上手体验
参考学习
- taproot asset 介绍:
- taproot asset 文档
- taproot asset demo
安装与配置
- docker
- docker compose/ docker desktop
- polar:
- https://github.com/jamaljsr/polar
- linux 下可能要注意 docker volume 没有权限读取的问题,
chmod chown
一下就行
- btc exporer
- https://github.com/janoside/btc-rpc-explorer
- 主要用来看一下 bitcoin regtest 链上信息.
- 需要根据 bitcoin core node 的 rpc 相关信息配置一下
.env
文件:
简单的 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.
- 这是我们使用 btc-expoler 看一下 mempool, 发现有一笔新的交易
- 此时 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, 股票, 证券国债等等. 这些主要的风险是发行方跑路还有监管, 尤其要考虑到对中转结点的监管风险.