Tương tác với Blockchain Cardano bằng CLI
Cài thêm các phụ thuộc
apt update -y
apt install nano
apt install vim
I. Khôi phục ví từ cụm từ ghi nhớ
Điều kiện tiên quyết Quy trình này yêu cầu cardano-wallet và cardano-cli .
Cardano Wallet
Navigating the HD wallet tree structure
Tạo cụm từ bí mật
Taọ thư mục chứa các key và không gian làm việc.
mkdir Lab_cli
cardano-address recovery-phrase generate --size 24 > recovery-phrase.prv
Nhập cụm mật khẩu 15 từ hoặc cụm 24 từ (ví Shelley trên Daedalus,...) tại dấu nhắc để chuyển đổi nó thành khóa cá nhân gốc:
B1. Tạo file gồm 24 ký tự
nano recovery-phrase.prv
B2. Khôi phục khóa riêng gốc.
BASENAME=test
cardano-address key from-recovery-phrase Shelley < recovery-phrase.prv > $BASENAME.root.prv
B3. Tạo cặp khóa thanh toán.
Bây giờ hãy tạo khóa riêng $BASENAME.payment-0.prv cho địa chỉ ví đầu tiên và khóa công khai tương ứng của nó $BASENAME.payment-0.pub:
cardano-address key child 1852H/1815H/0H/0/0 < $BASENAME.root.prv > $BASENAME.payment-0.prv
cardano-address key public --without-chain-code < $BASENAME.payment-0.prv > $BASENAME.payment-0.pub
B4. Tạo cặp khóa thanh toán với cli.
Các khóa thanh toán khác có thể được tạo bằng cách tăng số cuối cùng trong đường dẫn xuất 1852H/1815H/0H/0/0
. Các khóa thanh toán từ Trezor Model T có được bằng cách tăng chữ số cuối cùng này, nhưng các khóa dành cho ví Daedalus có được từ việc tăng chữ số cuối cùng của đường dẫn xuất 1852H/1815H/0H/0/0
và 1852H/1815H/0H/1/0
.
Các khóa này có thể được chuyển đổi sang định dạng thuận tiện nhất cho cardano-cli, sử dụng các lệnh sau:
cardano-cli key convert-cardano-address-key --shelley-payment-key \
--signing-key-file $BASENAME.payment-0.prv \
--out-file $BASENAME.payment-0.skey
cardano-cli key verification-key --signing-key-file $BASENAME.payment-0.skey \
--verification-key-file $BASENAME.payment-0.vkey
Đặc biệt, $BASENAME.payment-0.skey
có thể được sử dụng để ký các giao dịch với cardano-cli: điều này sẽ cho phép một người chuyển tiền được bảo đảm bằng ví ban đầu.
B5. Tạo khóa cổ phần.
Quy trình tạo khóa cổ phần tương tự như quy trình tạo khóa thanh toán:
cardano-address key child 1852H/1815H/0H/2/0 < $BASENAME.root.prv > $BASENAME.stake.prv
cardano-address key public --without-chain-code < $BASENAME.stake.prv > $BASENAME.stake.pub
Tạo khóa cổ phần riêng tư với cli.
cardano-cli key convert-cardano-address-key --shelley-stake-key \
--signing-key-file $BASENAME.stake.prv \
--out-file $BASENAME.stake.skey
Tạo khóa cổ phần công khai với cli.
cardano-cli key verification-key --signing-key-file $BASENAME.stake.skey \
--verification-key-file $BASENAME.stake.vkey
B6. Tạo địa chỉ ví.
Mỗi địa chỉ thanh toán được tính từ khóa thanh toán tương ứng:
cardano-cli address build --testnet-magic 2 \
--payment-verification-key $(cat $BASENAME.payment-0.pub) \
--stake-verification-key $(cat $BASENAME.stake.pub) \
--out-file $BASENAME.payment-0.addr
Các địa chỉ này phải khớp với địa chỉ của ví ban đầu.
B7. Tạo địa chỉ ví cổ phần:
cardano-cli stake-address build --testnet-magic 2 \
--stake-verification-key-file $BASENAME.stake.pub \
--out-file $BASENAME.stake.addr
B8 Đọc UTxO trên ví
cardano-cli query utxo --address $(cat $BASENAME.payment-0.addr) --testnet-magic 2
Kiểm tra tình trạng node
Chúng ta cũng muốn kiểm tra xem Node của chúng ta có được cập nhật hay không. Để làm điều đó, chúng ta kiểm tra kỷ nguyên / khối hiện tại và so sánh nó với giá trị hiện tại được hiển thị trong Cardano Explorer for the testnet.
testnet="--testnet-magic 2"
cardano-cli query tip $testnet
Sẽ cung cấp cho bạn một đầu ra như thế này
{
"epoch": 282,
"hash": "82cfbbadaaec1a6204442b91de1535505b6482ae9858f3f0bd9c4bb9c8a2c12b",
"slot": 36723570,
"block": 6078639,
"era": "Mary"
}
Epoch và số vị trí phải khớp khi được so sánh với Cardano Explorer for testnet
Chúng ta sẽ lưu giá trị băm địa chỉ trong một biến được gọi là address
.
address=$(cat $BASENAME.payment-0.addr)
Cấp tiền cho địa chỉ
Thực hiện một giao dịch luôn yêu cầu bạn trả phí. Việc gửi nội dung gốc cũng yêu cầu gửi ít nhất 1 ada. Vì vậy, hãy đảm bảo rằng địa chỉ bạn sẽ sử dụng làm đầu vào cho giao dịch đúc tiền luôn có đủ tiền.
Trên mạng thử nghiệm - testnet, bạn có thể yêu cầu cấp tiền từ testnet faucet.
Export protocol parameters
Để tính toán các giao dich, chúng ta cần một số tham số giao thức hiện tại. Các tham số có thể được lưu trong một tệp có tên là protocol.json bằng câu lệnh:
cardano-cli query protocol-parameters $testnet --out-file protocol.json
II. Tạo giao dịch chuyển tADA từ ví của mình sang ví khác
Thiết lập các biến môi trường để thuận thiện cho việc giao dịch
testnet="--testnet-magic 2"
address=$(cat $BASENAME.payment-0.addr)
address_SKEY="$BASENAME.payment-0.skey"
OUT_ADDR="addr_test1qz8shh6wqssr83hurdmqx44js8v7tglg9lm3xh89auw007dd38kf3ymx9c2w225uc7yjmplr794wvc96n5lsy0wsm8fq9n5epq"
LOVELACE_VALUE=5000000
Lấy txhash và txid
cardano-cli query utxo $testnet --address $address
Xác định UTXO sử dụng để chi tiêu từ ví của Alice với cú pháp:
UTXO_IN=<TxHash>#<TxId>
Trong đó <TxHash> và <TxId> được lấy từ kết quả của câu lệnh truy vấn trên, cụ thể như sau:
UTXO_IN=b8c108bde14a183b79d00a48108c40808f46757ddfd16cdbf797fc0ebecd8047#0
B1. Xây dựng giao dịch (Build Tx)
cardano-cli conway transaction build $testnet \
--tx-in $UTXO_IN \
--tx-out $OUT_ADDR+$LOVELACE_VALUE \
--change-address $address \
--out-file simple-tx.raw
Bạn sẽ thấy xuất hiện file simple-tx.raw trong cùng thư mục thực hiện câu lệnh.
B2. Ký giao dịch (Sign Tx)
cardano-cli transaction sign $testnet \
--signing-key-file $address_SKEY \
--tx-body-file simple-tx.raw \
--out-file simple-tx.signed
Bạn sẽ thấy xuất hiện file simple-tx.signed trong cùng thư mục thực hiện câu lệnh.
B3. Gửi giao dịch lên Preview Testnet (Submit Tx)
cardano-cli transaction submit $testnet \
--tx-file simple-tx.signed
Transaction successfully submitted. → Thông báo giao dịch đã được thực hiện thành công
Kiểm tra số dư từ ví của bạn
cardano-cli query utxo $testnet --address $address
III. Tạo token
Trong phần này, chúng ta sẽ tạo tài sản gốc --chứ không phải NFT
Chúng ta đặc biệt khuyên bạn nên tham khảo phần này để hiểu cách hoạt động của giao dịch và đúc tiền. Minting NFTs sẽ tuân theo quy trình tương tự, chỉ với một vài chỉnh sửa. Nếu bạn quan tâm NFT, vui lòng truy cập Minting NFTs.
Yêu cầu
- Một nút Cardano đang chạy và được đồng bộ hóa - có thể truy cập thông qua lệnh
cardano-cli
. Hướng dẫn này được viết bằngcardano-cli
v 1.27.0. Một số lệnh có thể thay đổi. - Bạn có một số kiến thức về Linux về cách điều hướng giữa các thư mục, tạo và chỉnh sửa tệp cũng như thiết lập và kiểm tra các biến thông qua Linux shell.
Tổng quan
Hướng dẫn này sẽ cung cấp cho bạn một bản sao và hướng dẫn có thể dán qua vòng đời hoàn chỉnh của mã thông báo:
Đây sẽ là những bước chúng ta cần thực hiện để hoàn thành toàn bộ vòng đời:
- Thiết lập mọi thứ sẵn sàng
- Tạo địa chỉ và khóa (keys) mới
- Tạo chính sách đúc tiền
- Soạn thảo một giao dịch đúc tiền
- Tính phí
- Gửi mã thông báo giao dịch và đúc token (cho chính mình)
- Gửi token
- Đốt token
Cấu trúc thư mục
Chúng ta sẽ làm việc trong một thư mục mới, Đây là tổng quan về các file sẽ được tạo ra:
├── burn-native-assets.raw # Giao dich để đốt token
├── burn-native-assets.signed # File ký giao dịch đã được ký để đốt token
├── mint-native-assets.raw # Giao dịch tạo token
├── mint-native-assets.signed # File ký giao dịch tạo token
├── metadata.json # Metadata mô tả đặc tính NFT
├── test.payment-0.addr # Địa chỉ để gửi và nhận
├── test.payment-0.skey # Khóa ký giao dịch
├── test.payment-0.vkey # Khóa xác nhận giao dịch
├── policy # Thư mục chứa chính sách
│ ├── policy.script # Script tạo policyID
│ ├── policy.skey # Khóa ký Policy
│ ├── policy.vkey # Khóa xác nhận Policy
│ └── policyID # File chứa policy ID
└── protocol.json # File thông số hệ thống
Kiến trúc mã thông báo
Trước khi khai thác nội dung gốc, bạn cần tự hỏi bản thân ít nhất bốn câu hỏi sau:
- Tên của (các) mã thông báo sẽ là gì?
- Tôi muốn đúc bao nhiêu?
- Sẽ có giới hạn thời gian cho việc tương tác (đúc mã thông báo?)
- Ai sẽ có thể đúc chúng?
Số 1, 3 và 4 sẽ được xác định trong kịch bản chính sách tiền tệ (policy), trong khi số tiền thực tế sẽ chỉ được xác định trên giao dịch đúc tiền.
Đối với hướng dẫn này, chúng ta sẽ sử dụng:
- Tên của (các) mã thông báo tùy chỉnh của tôi sẽ là gì?
--> Chúng ta sẽ đặt tên là
Testtoken
vàSecondTesttoken
- Tôi muốn đúc bao nhiêu?
--> 10000000 each (10M
Testtoken
and 10MSecondTesttoken
) - Sẽ có giới hạn thời gian cho việc tương tác (đúc hoặc đốt mã thông báo?) ---> Không (tuy nhiên, chúng ta sẽ làm khi tạo NFT), chúng ta muốn đúc và đốt chúng theo cách chúng ta muốn.
- Ai sẽ có thể đúc chúng? --> chỉ có một chữ ký (mà chúng ta sơ hữu) mới có thể ký giao dịch và do đó có thể đúc mã thông báo
Khai báo biến
Vì chúng ta đã trả lời tất cả các câu hỏi ở trên, chúng ta sẽ đặt các biến trên terminal / bash của mình để làm cho khả năng đọc dễ dàng hơn một chút. Chúng ta cũng sẽ sử dụng testnet. Sự khác biệt duy nhất giữa việc khai thác nội dung gốc trong mạng chính là bạn cần thay thế testnet bằng mainnet.
Kể từ phiên bản cardano-cli 1.31.0, tên mã thông báo phải được mã hóa base16 . Vì vậy, ở đây, chúng ta sử dụng công cụ xxd để mã hóa tên mã thông báo.BASENAME=test
testnet="--testnet-magic 2"
tokenname1=$(echo -n "CBCA1" | xxd -ps | tr -d '\n')
tokenname2=$(echo -n "CBCA2" | xxd -ps | tr -d '\n')
tokenamount="10000000"
output="20000000"
Chúng ta sẽ sử dụng kỹ thuật thiết lập các biến này để giúp bạn dễ dàng theo dõi hơn..
Tạo policy
Chính sách (Policies) là yếu tố quyết định công việc tài sản gốc. Chỉ những người sở hữu từ khóa chính sách mới mới có thể tạo ra tài liệu gốc theo chính sách này. Chúng ta sẽ tạo một thư mục con riêng biệt trong thư mục công việc của mình để giữ cho mọi thứ được tách biệt theo chính sách và có tổ chức hơn. Để đọc thêm, vui lòng xem tài liệu chính thức hoặc trang github về tập lệnh đa chữ ký.
all
Kiểu type
với giá trị khóa all
chỉ ra rằng để chi tiêu đầu ra giao dịch này, cần có chữ ký tương ứng của tất cả các mã băm khóa thanh toán được liệt kê..
{
"scripts": [
{
"keyHash": "e09d36c79dec9bd1b3d9e152247701cd0bb860b5ebfd1de8abb6735a",
"type": "sig"
},
{
"keyHash": "a687dcc24e00dd3caafbeb5e68f97ca8ef269cb6fe971345eb951756",
"type": "sig"
},
],
"type": "all"
}
Tạo thư mục chưa policy
mkdir policy
Chúng ta không điều hướng vào thư mục này và mọi thứ được thực hiện từ thư mục làm việc của chúng ta.
Trước hết, chúng ta cần một số cặp khóa policy:
cardano-cli address key-gen \
--verification-key-file policy/policy.vkey \
--signing-key-file policy/policy.skey
Tạo một tệp policy.script
là chính sách đúc token.
touch policy/policy.script && echo "" > policy/policy.script
Sử dụng lệnh echo
để điền vào tệp:
echo "{" >> policy/policy.script
echo " \"keyHash\": \"$(cardano-cli address key-hash --payment-verification-key-file policy/policy.vkey)\"," >> policy/policy.script
echo " \"type\": \"sig\"" >> policy/policy.script
echo "}" >> policy/policy.script
Chung ta có thể xem chúng.
nano policy/policy.script
Bây giờ chúng ta có một tệp tập lệnh đơn giản xác định khóa xác minh chính sách làm nhân chứng để ký giao dịch đúc. Không có ràng buộc nào khác như khóa mã thông báo hoặc yêu cầu chữ ký cụ thể để gửi thành công giao dịch với chính sách đúc tiền này.
Mint tài sản
Để đúc Token gốc, chúng ta cần tạo Policy ID từ tệp tập lệnh mà chúng ta đã tạo.
cardano-cli transaction policyid --script-file ./policy/policy.script > policy/policyID
Đầu ra được lưu vào tệp policyID
vì chúng ta cần tham khảo nó sau này.
Nói nhanh về các giao dịch trong Cardano
Mỗi giao dịch trong Cardano yêu cầu thanh toán một khoản phí — tính đến thời điểm hiện tại — phần lớn sẽ được xác định bởi quy mô của những gì chúng ta muốn truyền tải. Càng nhiều byte được gửi, phí càng cao.
Đó là lý do tại sao thực hiện giao dịch trong Cardano là một quá trình ba chiều.
- Đầu tiên, chúng ta sẽ xây dựng một giao dịch, kết quả là một tệp. Đây sẽ là cơ sở để tính phí giao dịch.
- Chúng ta sử dụng tệp
raw
này và các tham số giao thức của mình để tính phí - Sau đó, chúng ta cần xây dựng lại giao dịch, bao gồm phí chính xác và số tiền đã điều chỉnh mà chúng ta có thể gửi. Vì chúng ta gửi nó cho chính mình nên đầu ra cần phải là số tiền chúng ta tài trợ trừ đi phí tính toán.
Một điều khác cần lưu ý là mô hình về cách các giao dịch và "số dư" được thiết kế trong Cardano. Mỗi giao dịch có một (hoặc nhiều) đầu vào (nguồn tiền của bạn, chẳng hạn như hóa đơn bạn muốn sử dụng trong ví của mình để thanh toán) và một hoặc nhiều đầu ra. Trong ví dụ đúc tiền của chúng ta, đầu vào và đầu ra sẽ giống nhau - địa chỉ của chính chúng ta .
Trước khi bắt đầu, một lần nữa chúng ta sẽ cần một số thiết lập để giúp việc xây dựng giao dịch dễ dàng hơn.
Trước tiên, hãy truy vấn địa chỉ thanh toán của bạn và lưu ý các giá trị khác nhau hiện có.
cardano-cli query utxo $testnet --address $address
Đầu ra của bạn sẽ trông giống như thế này (ví dụ hư cấu):
TxHash TxIx Amount
--------------------------------------------------------------------------------------
b35a4ba9ef3ce21adcd6879d08553642224304704d206c74d3ffb3e6eed3ca28 0 1000000000 lovelace
Vì chúng ta cần từng giá trị đó trong giao dịch của mình nên chúng ta sẽ lưu trữ chúng riêng lẻ trong một biến tương ứng.
Tạo các biến để mint Token
txhash="75b550532dfe0b103b73b9a1b9dcc446ce4aaff3df06f06476e4efc951809a23"
txix="1"
policyid=$(cat policy/policyID)
B1. Xây dựng giao dịch (Build Tx) Minting Transaction:
Bây giờ chúng ta đã sẵn sàng tạo giao dịch đầu tiên để tính phí của chúng ta và lưu nó vào một tệp có tên mint-native-assets.raw . Chúng ta sẽ tham chiếu các biến trong giao dịch của mình để cải thiện khả năng đọc vì chúng ta đã lưu gần như tất cả các giá trị cần thiết trong các biến. Đây là giao dịch của chúng ta trông như thế nào:
cardano-cli conway transaction build \
$testnet \
--tx-in $txhash#$txix \
--tx-out $address+$output+"$tokenamount $policyid.$tokenname1 + $tokenamount $policyid.$tokenname2" \
--mint "$tokenamount $policyid.$tokenname1 + $tokenamount $policyid.$tokenname2" \
--mint-script-file policy/policy.script \
--change-address $address \
--out-file mint-native-assets.raw
phân tích cú pháp
--tx-in $txhash#$txix \
Hàm băm của địa chỉ mà chúng ta sử dụng làm đầu vào cho giao dịch cần có đủ tiền. Vì vậy, cú pháp là: hàm băm, theo sau là dấu thăng, theo sau là giá trị TxIx của hàm băm tương ứng.
--tx-out $address+$output+"$tokenamount $policyid.$tokenname1 + $tokenamount $policyid.$tokenname2" \
Đây là phần đầu ra quan trọng. Đối với --tx-out , chúng ta cần chỉ định địa chỉ nào sẽ nhận giao dịch của này. Trong trường hợp của chúng ta, chúng ta gửi mã thông báo đến địa chỉ của chúng ta.
- Địa chỉ
- Dấu cộng +
- Đầu ra tính bằng Lovelace (ada)
- Dấu cộng +
- Dấu ngoặc kép
- Số lượng mã thông báo
- Một khoảng trống
- id chính sách
- Một dấu chấm
- Tên mã thông báo (tùy chọn nếu bạn muốn có nhiều/mã thông báo khác nhau: một ô trống, một dấu cộng, một ô trống và bắt đầu lại từ 6.)
- dấu ngoặc kép
--mint="$tokenamount $policyid.$tokenname1 + $tokenamount $policyid.$tokenname2" \
Một lần nữa, cú pháp tương tự như được chỉ định như trong --tx-out nhưng không có địa chỉ và số lovelace (ADA).
--change-address $address \
Đậy là phần còn lại ADA của UTxO gửi lại đỉa chỉ ký.
--out-file mint-native-assets.raw
Cuối cùng, Chúng ta lưu giao dịch của mình vào một tệp mà bạn có thể đặt tên theo ý muốn. Chỉ cần đảm bảo tham chiếu đúng tên tệp trong các lệnh sắp tới.
B2. Kí giao dịch
Các giao dịch cần phải được ký để chứng minh tính xác thực và quyền sở hữu của khóa chính sách.
cardano-cli transaction sign $testnet \
--signing-key-file $address_SKEY \
--signing-key-file policy/policy.skey \
--tx-body-file mint-native-assets.raw \
--out-file mint-native-assets.signed
Giao dịch đã ký sẽ được lưu trong một tệp mới có tên mint-native-assets.signed
B3. Gửi giao dịch
Bây giờ chúng ta sẽ gửi giao dịch, do đó đúc tài sản gốc của chúng ta:
cardano-cli transaction submit $testnet --tx-file mint-native-assets.signed
Xin chúc mừng, chúng ta hiện đã đúc thành công mã thông báo của riêng mình. Sau vài giây, chúng ta có thể kiểm tra địa chỉ đầu ra
cardano-cli query utxo $testnet --address $address
và sẽ thấy một cái gì đó như thế này
TxHash TxIx Amount
--------------------------------------------------------------------------------------
d82e82776b3588c1a2c75245a20a9703f971145d1ca9fba4ad11f50803a43190 0 999824071 lovelace + 10000000 45fb072eb2d45b8be940c13d1f235fa5a8263fc8ebe8c1af5194ea9c.5365636F6E6454657374746F6B656E + 10000000 45fb072eb2d45b8be940c13d1f235fa5a8263fc8ebe8c1af5194ea9c.54657374746F6B656E
IV. Gửi Token đến ví khác
Để gửi mã thông báo đến ví, chúng ta cần tạo một giao dịch khác - chỉ lần này là không có tham số đúc. Chúng ta sẽ thiết lập các biến của chúng ta cho phù hợp.
Thiết lập các biến môi trường để thuận thiện cho việc giao dịch
address=$(cat $BASENAME.payment-0.addr)
address_SKEY="$BASENAME.payment-0.skey"
BOB_ADDR="addr_test1qz8shh6wqssr83hurdmqx44js8v7tglg9lm3xh89auw007dd38kf3ymx9c2w225uc7yjmplr794wvc96n5lsy0wsm8fq9n5epq"
LOVELACE_VALUE=2000000
policyid=$(cat policy/policyID)
Chúng ta truy cập vào các biến khác từ quá trình đúc. Vui lòng kiểm tra xem các biến đó đã được đặt chưa:
echo Tokenname 1: $tokenname1
echo Tokenname 2: $tokenname2
echo Address: $address
echo Policy ID: $policyid
Lấy txhash và txid
cardano-cli query utxo $testnet --address $address
Xác định UTXO sử dụng để chi tiêu từ ví của Alice với cú pháp:
UTXO_IN=<TxHash>#<TxId>
Trong đó <TxHash> và <TxId> được lấy từ kết quả của câu lệnh truy vấn trên, cụ thể như sau:
UTXO_IN=71dce5be551f2c69d139eb8de50b9cd94fa94d6b47214307c6f32e574820755d#0
B1. Xây dựng giao dịch (Build Tx)
cardano-cli conway transaction build $testnet \
--tx-in $UTXO_IN \
--tx-out $BOB_ADDR+$LOVELACE_VALUE+"2 $policyid.$tokenname1" \
--change-address $address \
--out-file simple-tx.raw
Bạn sẽ thấy xuất hiện file simple-tx.raw trong cùng thư mục thực hiện câu lệnh.
B2. Ký giao dịch (Sign Tx)
cardano-cli transaction sign $testnet \
--signing-key-file $address_SKEY \
--tx-body-file simple-tx.raw \
--out-file simple-tx.signed
Bạn sẽ thấy xuất hiện file simple-tx.signed trong cùng thư mục thực hiện câu lệnh.
B3. Gửi giao dịch lên Preview Testnet (Submit Tx)
cardano-cli transaction submit $testnet \
--tx-file simple-tx.signed
Transaction successfully submitted. → Thông báo giao dịch đã được thực hiện thành công
Kiểm tra số dư từ ví của bạn
cardano-cli query utxo $testnet --address $address
V. Đốt mã thông báo
Trong phần cuối của vòng đời mã thông báo, chúng ta sẽ đốt 5000 mã thông báo mới được tạo SecondTesttoken , do đó sẽ hủy chúng vĩnh viễn.
Bạn sẽ không ngạc nhiên khi điều này — một lần nữa — sẽ được thực hiện với một giao dịch. Nếu bạn đã làm theo hướng dẫn này cho đến thời điểm này, thì bạn đã quen với quy trình, vì vậy hãy bắt đầu lại.
Thiết lập mọi thứ và kiểm tra địa chỉ của chúng ta:
cardano-cli query utxo --address $address $testnet
txhash="5c6a453342dcfb902111fd74f095cf0f6780932d7967785c752fb7a9bba219be"
txix="1"
policyid=$(cat policy/policyID)
B1. Xây dựng giao dịch (Build Tx) đốt token:
Việc đốt mã thông báo khá đơn giản. Bạn sẽ đưa ra một hành động đúc kết mới, nhưng lần này với đầu vào âm . Điều này về cơ bản sẽ trừ đi số lượng mã thông báo.
cardano-cli conway transaction build \
$testnet \
--tx-in $txhash#$txix \
--mint="-5000 $policyid.$tokenname2" \
--minting-script-file policy/policy.script \
--change-address $address \
--out-file burn-native-assets.raw
B2. Kí giao dịch
Các giao dịch cần phải được ký để chứng minh tính xác thực và quyền sở hữu của khóa chính sách.
cardano-cli transaction sign $testnet \
--signing-key-file $address_SKEY \
--signing-key-file policy/policy.skey \
--tx-body-file burn-native-assets.raw \
--out-file burn-native-assets.signed
Giao dịch đã ký sẽ được lưu trong một tệp mới có tên burn-native-assets.signed
B3. Gửi giao dịch
Bây giờ chúng ta sẽ gửi giao dịch, do đó đốt tài sản gốc của chúng ta:
cardano-cli transaction submit $testnet --tx-file burn-native-assets.signed
Xin chúc mừng, chúng ta hiện đã đúc thành công mã thông báo của riêng mình. Sau vài giây, chúng ta có thể kiểm tra địa chỉ đầu ra
cardano-cli query utxo $testnet --address $address
VI. Mint NFT
Phần này nó cũng giống như tạo Token. Tuy nhiên như các bạn đã biết thì NFT là duy nhất do vậy tham số về số lượng ta đặt là 1. Nếu bạn đã làm theo hướng dẫn này cho đến thời điểm này, thì bạn đã quen với quy trình, vì vậy hãy bắt đầu lại.
Thiết lập mọi thứ và kiểm tra địa chỉ của chúng ta:
cardano-cli query utxo --address $address $testnet
txhash="5c6a453342dcfb902111fd74f095cf0f6780932d7967785c752fb7a9bba219be"
txix="1"
policyid=$(cat policy/policyID)
realtokenname="NFT1"
tokenname=$(echo -n $realtokenname | xxd -b -ps -c 80 | tr -d '\n')
tokenamount="1"
output="1400000"
ipfs_hash="QmdpcDnQj5u54JZ5ZxQMLXjajZAeAXRqHs7dNGvh7wVhq1"
Hàm băm IPFS là một yêu cầu quan trọng và có thể được tìm thấy sau khi bạn tải hình ảnh của mình lên IPFS. Đây là một ví dụ về giao diện của IPFS khi một hình ảnh được tải lên trong pinata
Tạo metadata
Vì hiện tại chúng tôi đã xác định chính sách cũng như policyID
của mình, nên chúng tôi cần điều chỉnh thông tin siêu dữ liệu của mình.
Đây là một ví dụ về metadata.json mà chúng tôi sẽ sử dụng cho hướng dẫn này:
{
"721": {
"please_insert_policyID_here": {
"NFT1": {
"description": "This is my first NFT thanks to the Cardano foundation",
"name": "Cardano foundation NFT guide token",
"id": 1,
"image": ""
}
}
}
}
Phần tử thứ ba trong file json cần phải có cùng tên với nội dung gốc NFT của chúng ta.
Lưu tệp này dưới dạng metadata.json
.
Nếu bạn muốn tạo nó "một cách nhanh chóng", hãy sử dụng các lệnh sau:
echo "{" >> metadata.json
echo " \"721\": {" >> metadata.json
echo " \"$(cat policy/policyID)\": {" >> metadata.json
echo " \"$(echo $realtokenname)\": {" >> metadata.json
echo " \"description\": \"This is my first NFT thanks to the Cardano foundation\"," >> metadata.json
echo " \"name\": \"Cardano foundation NFT guide token\"," >> metadata.json
echo " \"id\": \"1\"," >> metadata.json
echo " \"image\": \"ipfs://$(echo $ipfs_hash)\"" >> metadata.json
echo " }" >> metadata.json
echo " }" >> metadata.json
echo " }" >> metadata.json
echo "}" >> metadata.json
B1. Xây dựng giao dịch (Build Tx) Mint NFT:
cardano-cli conway transaction build \
$testnet \
--tx-in $txhash#$txix \
--tx-out $address+$output+"$tokenamount $policyid.$tokenname" \
--mint "$tokenamount $policyid.$tokenname" \
--mint-script-file policy/policy.script \
--change-address $address \
--metadata-json-file metadata.json \
--out-file mint-nft.raw
B2. Kí giao dịch
Các giao dịch cần phải được ký để chứng minh tính xác thực và quyền sở hữu của khóa chính sách.
cardano-cli transaction sign $testnet \
--signing-key-file $address_SKEY \
--signing-key-file policy/policy.skey \
--tx-body-file mint-nft.raw \
--out-file mint-nft.signed
Giao dịch đã ký sẽ được lưu trong một tệp mới có tên burn-native-assets.signed
B3. Gửi giao dịch
Bây giờ chúng ta sẽ gửi giao dịch, do đó đốt tài sản gốc của chúng ta:
cardano-cli transaction submit $testnet --tx-file mint-nft.signed
Xin chúc mừng, chúng ta hiện đã đúc thành công mã thông báo của riêng mình. Sau vài giây, chúng ta có thể kiểm tra địa chỉ đầu ra
cardano-cli query utxo $testnet --address $address