还在使用智能合约吗? 手把手带你创建标准的 Chia Assert Token (CAT)
前言
过去一段时间一直在关注chia的发展,自从chia在去年9月推出了CAT,chia也算是进入了'合约'时代。chia选择lisp作为编程语言有他的理由,但作者觉得选择一个大多数程序员都没听说过的语言,这对chia assert token在圈内的传播可能或多或少有些影响。不过总的来说,chia开创了很多新事物,比如'币'本身即'合约',这很有趣。作者阅读了chia官方的CAT创建教程,亲自尝试了整个标准话的创建过程,期间也遇到了一些问题,通过整理把过程分享出来,希望对chia assert token 感兴趣的朋友有所帮助
0 背景
0.1 什么是CAT?
CAT 全称 Chia Assert Token, 是一种可以在 Chia 的区块链上创建和/或交易的代币。这些代币的发行人使用 “Token and Asset Issuance Limiter”(TAIL)为其铸造和销毁制定规则。这些代币的所有者可以控制它们的使用方式。 CAT 可以实现为稳定币、股票发行代币、投票股份或您能想到的任何其他东西。
1 开发环境
ubuntu 20.04 lts
2 前提
1.你已经安装 Chia-Blockchain
2.你已经安装 CAT-admin-tool,并且执行以下代码正确返回
cats --help
cdv --help
3.你已经完成fullnode的同步,chia show -s 的状态显示为 Synced
3 创建过程
3.1 Single-mint CAT
对于任何想要创建具有保证固定供应的代币的人来说,具有单一铸币 TAIL 的 CAT 将非常有用。
发行场景:发行10个限量纪念币,作为参与某个活动的象征
cats --tail /root/CAT-admin-tool/reference_tails/genesis_by_coin_id.clsp.hex --send-to xch1yldtumanqzxyyqv4xzhl023j7qad7jc545elhw6tprkh06852k7su065as --amount 10000 -m 1000 --as-bytes --select-coin -f 325372310
#coin id:
#0676c170b12efc1e3bf05a0cd44318d9cf93dd11f93f2d762f40d868ac51b395
cats --tail /root/CAT-admin-tool/reference_tails/genesis_by_coin_id.clsp.hex --send-to xch1yldtumanqzxyyqv4xzhl023j7qad7jc545elhw6tprkh06852k7su065as --amount 10000 -m 1000 --as-bytes -f 325372310 --curry 0x0676c170b12efc1e3bf05a0cd44318d9cf93dd11f93f2d762f40d868ac51b395 -q
#Asset ID: 679fad0034606598b8a4e3a4df872a432402947ba54c82dc811933ef940c22dd
#spend_bundle: xxxxxxxxxxxxxxxxxxxxxxxxxxx
cdv rpc pushtx [spend_bundle]
3.2 Single-mint CAT Clsp
; This is a "genesis checker" for use with cc.clvm.
;
; This checker allows new CATs to be created if they have a particular coin id as parent
;
; The genesis_id is curried in, making this lineage_check program unique and giving the CAT it's uniqueness
(mod (
GENESIS_ID
Truths
parent_is_cat
lineage_proof
delta
inner_conditions
_
)
(include cat_truths.clib)
(if delta
(x)
(if (= (my_parent_cat_truth Truths) GENESIS_ID)
()
(x)
)
)
)
3.3 Multiple Mint CAT
我们将设置此 CAT 以委托我们之前设置的相同 TAIL。这意味着在您允许之前,没有其他人可以铸造新的代币。请记住,这只是委托 TAIL 的许多可能实现之一。
发行场景:由于活动热度超过预期,为了让每个人参与活动的人都能领取到至少1枚纪念币,现在增加发行50个CATs纪念币
#wallet_address:
#txch1zjwsk8g99afhgceun5l0ejz7zcj6rechvlsrjuefcp29lhxeap5sk207mg
#master_publick_key:
#ad588f4b093dc221e1dc8c1607156ddab4ac131ff54eb80bcb4f69e6fa5dfb4f76b96a7f99a5ffbb212302b05d0f5a6e
#fingerprint:
#945233328
cats --tail ./reference_tails/delegated_tail.clsp.hex --curry 0xad588f4b093dc221e1dc8c1607156ddab4ac131ff54eb80bcb4f69e6fa5dfb4f76b96a7f99a5ffbb212302b05d0f5a6e --send-to txch1zjwsk8g99afhgceun5l0ejz7zcj6rechvlsrjuefcp29lhxeap5sk207mg -a 50000 --as-bytes --select-coin
#coin id:
#56b304e959da72dcf5fdbe9e0a10766d1f65983ad4a0575ac203200efac0e553
cdv clsp curry ./reference_tails/genesis_by_coin_id.clsp.hex -a 0x56b304e959da72dcf5fdbe9e0a10766d1f65983ad4a0575ac203200efac0e553
#delegated puzzle
#((a (q 2 (i 47 (q 8) (q 2 (i (= 45 2) () (q 8)) 1)) 1) (c (q . 0x56b304e959da72dcf5fdbe9e0a10766d1f65983ad4a0575ac203200efac0e553) 1))
cdv clsp curry ./reference_tails/genesis_by_coin_id.clsp.hex -a 0x56b304e959da72dcf5fdbe9e0a10766d1f65983ad4a0575ac203200efac0e553 --treehash
#delegated puzzle hash:
#42ea1e5bfab6659be3c9a97e2f26cb0fc296af792e670e489a611ab1d7a7751c
chia keys sign -d 42ea1e5bfab6659be3c9a97e2f26cb0fc296af792e670e489a611ab1d7a7751c -f 945233328 -t m -b
#sign result:
#99ec95f187780ff29e1f356630c96135c9787f433be43de045f3c3c96e9badefd02e59d9ee63825713d41c0592cfd3320f3203c76a6832407da951c3bd36ed15f0a6de05cdd94de03f5ef759e681f0493a0958bc227484d601fb45e051b18751
cats --tail ./reference_tails/delegated_tail.clsp.hex --curry 0xad588f4b093dc221e1dc8c1607156ddab4ac131ff54eb80bcb4f69e6fa5dfb4f76b96a7f99a5ffbb212302b05d0f5a6e --send-to txch1zjwsk8g99afhgceun5l0ejz7zcj6rechvlsrjuefcp29lhxeap5sk207mg -a 50000 --as-bytes --solution "((a (q 2 (i 47 (q 8) (q 2 (i (= 45 2) () (q 8)) 1)) 1) (c (q . 0x56b304e959da72dcf5fdbe9e0a10766d1f65983ad4a0575ac203200efac0e553) 1)) ())" --signature 99ec95f187780ff29e1f356630c96135c9787f433be43de045f3c3c96e9badefd02e59d9ee63825713d41c0592cfd3320f3203c76a6832407da951c3bd36ed15f0a6de05cdd94de03f5ef759e681f0493a0958bc227484d601fb45e051b18751 -q
#assert id:88cea92795206294825a1782a684579fe42a4320211f23e7c43bf312244efe4a
#spend bundle:xxxxxxxxxxxxx
cdv rpc pushtx [spend bundle]
3.4 Multiple Mint delegated_tail.clsp
; This is a "limitations_program" for use with cat.clvm.
(mod (
PUBKEY
Truths
parent_is_cat
lineage_proof
delta
inner_conditions
(
delegated_puzzle
delegated_solution
)
)
(include condition_codes.clib)
(defun sha256tree1 (TREE)
(if (l TREE)
(sha256 2 (sha256tree1 (f TREE)) (sha256tree1 (r TREE)))
(sha256 1 TREE)))
(c (list AGG_SIG_UNSAFE PUBKEY (sha256tree1 delegated_puzzle))
(a delegated_puzzle (c Truths (c parent_is_cat (c lineage_proof (c delta (c inner_conditions delegated_solution))))))
)
)
4 遇到的问题
4.1 --solution "(<delegated puzzle> ())" 给了错误的实参
第一次对delegated puzzle理解错误,把treehash当成了实参,结果得到了下面的错误信息
cats --tail ./reference_tails/delegated_tail.clsp.hex --curry 0xad588f4b093dc221e1dc8c1607156ddab4ac131ff54eb80bcb4f69e6fa5dfb4f76b96a7f99a5ffbb212302b05d0f5a6e --send-to txch1zjwsk8g99afhgceun5l0ejz7zcj6rechvlsrjuefcp29lhxeap5sk207mg -a 50000 --as-bytes --solution "(42ea1e5bfab6659be3c9a97e2f26cb0fc296af792e670e489a611ab1d7a7751c ())" --signature 99ec95f187780ff29e1f356630c96135c9787f433be43de045f3c3c96e9badefd02e59d9ee63825713d41c0592cfd3320f3203c76a6832407da951c3bd36ed15f0a6de05cdd94de03f5ef759e681f0493a0958bc227484d601fb45e051b18751 -q
#get error:
#("{'error': 'Failed to include transaction "
# '79dbe19341d1e6b787b6133099448e1b8301b0e75298a033a16ad99278035abc, error '
# "GENERATOR_RUNTIME_ERROR', 'success': False}")
在官方的Creating a multiple mint CAT教程里面有两个步骤,这里的<delegated puzzle>实际上是指的solution,而不是solution hash
#这里的执行结果才是--solution需要的参数
cdv clsp curry ./reference_tails/genesis_by_coin_id.clsp.hex -a 0x56b304e959da72dcf5fdbe9e0a10766d1f65983ad4a0575ac203200efac0e553
#((a (q 2 (i 47 (q 8) (q 2 (i (= 45 2) () (q 8)) 1)) 1) (c (q . 0x56b304e959da72dcf5fdbe9e0a10766d1f65983ad4a0575ac203200efac0e553) 1))
#这里的执行结果是获取solution hash
cdv clsp curry ./reference_tails/genesis_by_coin_id.clsp.hex -a 0x56b304e959da72dcf5fdbe9e0a10766d1f65983ad4a0575ac203200efac0e553 --treehash
#42ea1e5bfab6659be3c9a97e2f26cb0fc296af792e670e489a611ab1d7a7751c
正确代码:
cats --tail ./reference_tails/delegated_tail.clsp.hex --curry 0xad588f4b093dc221e1dc8c1607156ddab4ac131ff54eb80bcb4f69e6fa5dfb4f76b96a7f99a5ffbb212302b05d0f5a6e --send-to txch1zjwsk8g99afhgceun5l0ejz7zcj6rechvlsrjuefcp29lhxeap5sk207mg -a 50000 --as-bytes --solution "((a (q 2 (i 47 (q 8) (q 2 (i (= 45 2) () (q 8)) 1)) 1) (c (q . 0x56b304e959da72dcf5fdbe9e0a10766d1f65983ad4a0575ac203200efac0e553) 1)) ())" --signature 99ec95f187780ff29e1f356630c96135c9787f433be43de045f3c3c96e9badefd02e59d9ee63825713d41c0592cfd3320f3203c76a6832407da951c3bd36ed15f0a6de05cdd94de03f5ef759e681f0493a0958bc227484d601fb45e051b18751 -q
5 在线创建工具
5.1 如果你没有任何编程基础或者只是想简单的创建一种chia assert token,可以通过在线工具来实现
输入接收地址,发行数量,币种名称


发行完成后,把assert id 添加到钱包
chia wallet add_token -id [your assert id] -n [your assert name]
然后执行chia wallet show, wallet ID 2 显示了我们刚才发行的 chia assert token
Wallet height: 1872295
Sync status: Synced
Balances, fingerprint: [your finger print]
Wallet ID 1 type STANDARD_WALLET Chia Wallet
-Total Balance: 3.182113e-05 xch (31821130 mojo)
-Pending Total Balance: 3.182113e-05 xch (31821130 mojo)
-Spendable: 3.182113e-05 xch (31821130 mojo)
Wallet ID 2 type CAT DEMO
-Total Balance: 1.0 (1000 mojo)
-Pending Total Balance: 1.0 (1000 mojo)
-Spendable: 1.0 (1000 mojo)
Referenced link
CAT1 Standard: https://chialisp.com/docs/puzzles/cats/
CAT Creation Tutorial: https://chialisp.com/docs/tutorials/CAT_Launch_Process_Linux_MacOS/
Catsfounder: https://www.catsfounder.com
Chialisp: https://chialisp.com

浙公网安备 33010602011771号