3月1日 Cardano($ADA)名为 Mary的硬分叉升级,带来支持 tokens创建的功能。和以太坊的智能合约不同,native token的部署更为简易且创建后可以依附cardano网络的高性能同时交易无需支付智能合约的手续费成本。好了我不是来吹彩虹屁的,下面来演示下怎样再命令行下创建自己的 token。

P.S. 后记补充:

1.26.1 版本开始,以下命令中所有的 --mary-era 参数应去除。因已mary era是后续版本的默认值且 cardano-cli 不再支持此参数。

-1. 目标

创建一个token,名称叫 CORGI(柯基币)
数量 66600000000 (666亿,笑)

0. 准备与前提

  • 下述操作正式环境,如需在测试网络调试,替换所有的 --mainnet 参数为 --testnet xx;
  • 下文中关于节点(cnode)、钱包使用cntools管理,编译安装部署配置会全部高速略过,相关资料参考文末链接;
  • 需要准备一个cnode,并且已同步好在后台运行;
  • 命令行下创建一个钱包,获得地址: addr1q96……kcyqh3 , 以及支付签名密钥文件 payment.skey
  • 向钱包地址转入10 ADA(创建及转出需要消耗手续费,但用不到这么多的);

创建一个目录存放和处理铸币相关的数据, 下文命令皆在此路径下执行。
把payment.skey拷贝到此目录下,
socket路径替换为你的节点的socket路径

cd ;
mkdir adatoken && cd adatoken
export CARDANO_NODE_SOCKET_PATH="/opt/cardano/cnode/sockets/node0.socket"

以下命令代入钱包地址查询的UTXO,得到 txHash(之前未export 可能会因为缺少环境变量报错)

cardano-cli query utxo --mary-era --mainnet --address addr1q96……kcyqh3

                           TxHash                                 TxIx        Amount
--------------------------------------------------------------------------------------
ebd34b5f83c9dd0a21bdeb8f4461c8140af8e8aa5fbeb7d0df2a91c6f1720768     0        10000000 lovelace

1. 生成参数 protocol.json

cardano-cli  query protocol-parameters \
--mainnet \
--mary-era \
--out-file protocol.json

2. 生成 Policy

cardano-cli address key-gen --verification-key-file policy.vkey --signing-key-file policy.skey
KEYHASH=$(cardano-cli address key-hash --payment-verification-key-file policy.vkey)
cat > policy.script << EOF
{
  "keyHash": "$KEYHASH",
  "type": "sig"
}
EOF

获得 policeId : 901dc21……6b73bf

cardano-cli transaction policyid --script-file policy.script
901dc2160acddef17bc98ec758bb08af3a1957f7377b404e396b73bf

3. 生成铸造(Mint) token 的tx报文

第一次生成输入fee 0 ;
--tx--out 需要代入的依次是 钱包地址、 上文utxo查询到的金额(lovelace)、 代币数量、 policeId.token名称
--mint 代入 代币数量、 policeId.token名称;
生成未签名的报文 mint.raw

cardano-cli transaction build-raw \
--mary-era --fee 0 \
--tx-in ebd34b5f83c9dd0a21bdeb8f4461c8140af8e8aa5fbeb7d0df2a91c6f1720768#0 \
--tx-out addr1q96……kcyqh3+10000000+"66600000000 901dc2160acddef17bc98ec758bb08af3a1957f7377b404e396b73bf.CORGI" \
--mint="66600000000 901dc2160acddef17bc98ec758bb08af3a1957f7377b404e396b73bf.CORGI" \
--out-file mint.raw

4. 计算转账手续费

cardano-cli transaction calculate-min-fee \
--tx-body-file mint.raw \
--tx-in-count 1 \
--tx-out-count 1 \
--witness-count 2 \
--mainnet \
--protocol-params-file protocol.json

181517 Lovelace

5. 代入手续费,重新生成一次报文

把第2步的脚本两处改动后再执行一次,一个是 --fee的值,另一处是 --tx-out 转账金额要减去fee 其余不变
如果缺少这一步,提交0手续费的报文会返回手续费0不足而失败,错误类似于:

Shelley command failed: transaction submit Error: Error while submitting tx: ApplyTxError [LedgerFailure (UtxowFailure (UtxoFailure (FeeTooSmallUTxO (Coin 174257) (Coin 0)))),LedgerFailure (UtxowFailure (UtxoFailure (ValueNotConservedUTxO (Value 10000000 (fromList [(PolicyID {policyID = ScriptHash "901dc2160acddef17bc98ec758bb08af3a1957f7377b404e396b73bf"},fromList [("CORGI",6)])])) (Value 1000000 (fromList [(PolicyID {policyID = ScriptHash "901dc2160acddef17bc98ec758bb08af3a1957f7377b404e396b73bf"},fromList [("CORGI",6)])]))))),LedgerFailure (UtxowFailure (UtxoFailure (OutputTooSmallUTxO [(Addr Mainnet (KeyHashObj (KeyHash "75d5a526bbbc17e3d944cae41bfc2835e2ad530031c1f23bd94f2b64")) (StakeRefBase (KeyHashObj (KeyHash "fa79ed86328db04db3b2bed6e1b1dae794ae9d427c6921cbd60ae8f1"))),Value 1000000 (fromList [(PolicyID {policyID = ScriptHash "901dc2160acddef17bc98ec758bb08af3a1957f7377b404e396b73bf"},fromList [("CORGI",6)])]))])))]

cardano-cli transaction build-raw \
--mary-era --fee 181517 \
--tx-in ebd34b5f83c9dd0a21bdeb8f4461c8140af8e8aa5fbeb7d0df2a91c6f1720768#0 \
--tx-out addr1q96……kcyqh3+9818483+"66600000000 901dc2160acddef17bc98ec758bb08af3a1957f7377b404e396b73bf.CORGI" \
--mint="66600000000 901dc2160acddef17bc98ec758bb08af3a1957f7377b404e396b73bf.CORGI" \
--out-file mint.feed.raw

6. 对以计算手续费的报文进行签名

cardano-cli transaction sign \
    --signing-key-file payment.skey \
    --signing-key-file policy.skey \
    --script-file policy.script \
    --mainnet \
    --tx-body-file mint.feed.raw \
    --out-file mint.signed

7. 提交转账

cardano-cli transaction submit --tx-file mint.signed --mainnet

如果没有返回任何信息,代表操作成功,等待若干秒后再次查询 UTXO

cardano-cli query utxo --mary-era --mainnet --address addr1q96……kcyqh3
                           TxHash                                 TxIx        Amount
--------------------------------------------------------------------------------------
ebd34b5f83c9dd0a21bdeb8f4461c8140af8e8aa5fbeb7d0df2a91c6f1720768     1        39823411 lovelace
f664a8236978d8dfe6f91943dffd36e26e9a59e62bdb271658f2b95e41f21b84     0        9818483 lovelace + 66600000000 901dc2160acddef17bc98ec758bb08af3a1957f7377b404e396b73bf.CORGI

可见代币已创建成功

如何转账和使用就不在本篇继续罗嗦了。
看不懂也不用着急,IOHK将在不远未来直接提供图形化创建token的工具,只需要填个表单点两下按钮token就能创建出来,0门槛。
tokenbuildergui.png

参考链接

标签: cardano, ada, token, asset, Native tokens, CLI

添加新评论