还在使用智能合约吗? 手把手带你创建标准的 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)


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

posted @ 2022-04-22 18:16  kelvin_2022  阅读(742)  评论(0)    收藏  举报