Minting Native Assets
Trong phần này, chúng tôi sẽ khai thác tài sản gốc --chứ không phải NFT
Chúng tôi đặ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 quanHướ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 chúng tôi)
- Gửi token đến ví Daedalus
- Đốt token
#
Cấu trúc thư mụcChú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:
#
Kiến trúc mã thông báoTrướ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 tùy chỉnh của tôi 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 hoặc ghi mã thông báo?)
- Ai sẽ có thể đúc chúng?
Số 1, 3 và 4 sẽ được xác định trong cái gọi là kịch bản chính sách tiền tệ, 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 tôi 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 tôi 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 tôi sẽ làm khi tạo NFT), chúng tôi muốn đúc và đốt chúng theo cách chúng tôi muốn.
- Ai sẽ có thể đúc chúng? --> chỉ có một chữ ký (mà chúng tôi sơ hữu) mới có thể ký giao dịch và do đó có thể đúc mã thông báo
#
Cài đặt- Thiết lập#
Thiết lập Cardano node socket pathĐể làm việc với cardano-cli
chúng ta cần thiết lập một biến môi trường được gọi là CARDANO_NODE_SOCKET_PATH
. Xin lưu ý rằng tên biến đều là chữ hoa. Biến cần giữ đường dẫn tuyệt đối đến tệp socket của cài đặt nút (node) Cardano đang chạy của bạn.
Nếu bạn không chắc chắn hoặc không biết tìm đường dẫn ổ cắm của mình ở đâu, vui lòng kiểm tra lệnh về cách bạn bắt đầu / chạy nút Cardano của mình.
Ví dụ - nếu bạn bắt đầu nút của mình bằng lệnh này
Bạn cần đặt biến thành đường dẫn tương ứng thông qua tham số --socket-path
:
Bạn cần điều chỉnh đường dẫn trên thiết lập và đường dẫn ổ cắm của mình cho phù hợp.
#
Cải thiện cho dễ đọcVì chúng tôi đã trả lời tất cả các câu hỏi ở trên, chúng tôi 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 tôi 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 tôi sử dụng công cụ xxd để mã hóa tên mã thông báo.Chúng tôi 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..
#
Kiểm tra tình trạng nodeChúng tôi cũng muốn kiểm tra xem Node của chúng tôi có được cập nhật hay không. Để làm điều đó, chúng tôi 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.
Sẽ cung cấp cho bạn một đầu ra như thế này
Epoch và số vị trí phải khớp khi được so sánh với Cardano Explorer for testnet
#
Thiết lập không gian làm việcChúng ta sẽ bắt đầu với một nơi làm việc sạch sẽ. Vì vậy, hãy tạo một thư mục mới và làm việc trong thư mục đó.
###Tạo khóa và địa chỉ
Nếu bạn đã có địa chỉ thanh toán và khóa và bạn muốn sử dụng chúng, bạn có thể bỏ qua bước này. Nếu không - chúng ta cần tạo khóa và địa chỉ để gửi giao dịch và gửi và nhận ada hoặc tài sản gốc.
Khóa xác minh và khóa ký là những khóa đầu tiên chúng tôi cần tạo.
Hai khóa này bây giờ có thể được sử dụng để tạo một địa chỉ.
Chúng ta sẽ lưu giá trị băm địa chỉ trong một biến được gọi là address
.
#
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 tôi 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:
#
Minting tài sản gốc#
Tạo policyChí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 tôi 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ý .
Chúng tôi 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 tôi. :::
Trước hết, chúng tôi - một lần nữa - cần một số cặp khóa:
Tạo một tệp policy.script
và điền vào đó một chuỗi trống.
Sử dụng lệnh echo
để điền vào tệp:
Bây giờ chúng tôi 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 nội dung gốc, chúng tôi cần tạo ID chính sách từ tệp tập lệnh mà chúng tôi đã tạo.
Đầu ra được lưu vào tệp policyID
vì chúng tôi cần tham khảo nó sau này.
#
Xây dựng giao dịch thô để gửi cho chính mìnhĐể đúc mã thông báo, chúng tôi sẽ thực hiện giao dịch bằng cách sử dụng địa chỉ được tạo và tài trợ trước đó của chúng tôi.
#
Nói nhanh về các giao dịch trong CardanoMỗ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 tôi 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 tôi 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 tôi 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 tôi 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 tôi có thể gửi. Vì chúng tôi gửi nó cho chính mình nên đầu ra cần phải là số tiền chúng tôi 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 tôi, đầu vào và đầu ra sẽ giống nhau - địa chỉ của chính chúng tôi .
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ó.
Đầu ra của bạn sẽ trông giống như thế này (ví dụ hư cấu):
Vì chúng tôi cần từng giá trị đó trong giao dịch của mình nên chúng tôi sẽ lưu trữ chúng riêng lẻ trong một biến tương ứng.
Đối với ví dụ hư cấu của chúng tôi, điều này sẽ dẫn đến đầu ra sau - vui lòng điều chỉnh các giá trị của bạn cho phù hợp :
Ngoài ra, các giao dịch chỉ được sử dụng để tính phí vẫn phải có một khoản phí được đặt, mặc dù không nhất thiết phải chính xác. Phí tính toán sẽ được bao gồm trong lần thứ hai giao dịch này được xây dựng (tức là giao dịch để ký và gửi). Lần đầu tiên, chỉ có độ dài tham số phí là quan trọng, vì vậy ở đây chúng tôi chọn giá trị tối đa ( lưu ý ):
Bây giờ chúng tôi đã sẵn sàng tạo giao dịch đầu tiên để tính phí của chúng tôi và lưu nó vào một tệp có tên matx.raw . Chúng tôi 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 tôi đã 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 tôi trông như thế nào:
Trong các phiên bản sau của cardano-cli (ít nhất là từ >1.31.0), tên mã thông báo phải được mã hóa base16 nếu không bạn sẽ gặp lỗi
Bạn có thể khắc phục điều này bằng cách xác định lại tên mã thông báo. Trong hướng dẫn này, tên mã thông báo base16 tương đương là:
#
phân tích cú phápDưới đây là bảng phân tích cú pháp về các tham số chúng tôi xác định trong giao dịch đúc tiền của mình:
Phí mạng mà chúng tôi cần phải trả cho giao dịch của mình. Phí sẽ được tính thông qua các tham số mạng và tùy thuộc vào kích thước (tính bằng byte) mà giao dịch của chúng tôi sẽ có. Dung lượng file càng lớn thì phí càng cao.
Hàm băm của địa chỉ mà chúng tôi 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.
Đây là nơi phần một của phép thuật xảy ra. Đối với --tx-out , chúng tôi cần chỉ định địa chỉ nào sẽ nhận giao dịch của chúng tôi. Trong trường hợp của chúng tôi, chúng tôi gửi mã thông báo đến địa chỉ của chúng tôi. :::note Cú pháp rất quan trọng, vì vậy đây là từng từ một. Không có khoảng trống trừ khi được nêu rõ ràng:
- băm địa chỉ
- một dấu cộng
- đầu ra tính bằng Lovelace (ada) (đầu ra = số tiền đầu vào — phí)
- một dấu cộng
- dấu ngoặc kép
- số lượng mã thông báo
- một khoảng trống/không gian
- 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 :::
Một lần nữa, cú pháp tương tự như được chỉ định trong --tx-out nhưng không có địa chỉ và đầu ra.
Chúng tôi 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. Tôi đã chọn gắn bó với các tài liệu chính thức và khai báo nó là matx.raw .
Dựa trên giao dịch thô này, chúng tôi có thể tính phí giao dịch tối thiểu và lưu trữ nó trong biến $fee . Chúng tôi hơi lạ mắt ở đây và chỉ lưu trữ giá trị để chúng tôi có thể sử dụng biến cho các phép tính dựa trên thiết bị đầu cuối:
Hãy nhớ rằng, đầu vào và đầu ra của giao dịch phải bằng nhau, nếu không, giao dịch sẽ thất bại. Không thể có thức ăn thừa. Để tính toán sản lượng còn lại, chúng ta cần trừ phí từ quỹ của mình và lưu kết quả vào biến đầu ra.
Bây giờ chúng tôi có mọi giá trị chúng tôi cần để xây dựng lại giao dịch, sẵn sàng để được ký kết. Vì vậy, chúng tôi phát hành lại cùng một lệnh để xây dựng lại, sự khác biệt duy nhất là các biến của chúng tôi hiện đang giữ các giá trị chính xác.
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.
Giao dịch đã ký sẽ được lưu trong một tệp mới có tên matx.signed thay vì matx.raw . :::
Bây giờ chúng tôi sẽ gửi giao dịch, do đó đúc tài sản gốc của chúng tôi:
Xin chúc mừng, chúng tôi 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
và sẽ thấy một cái gì đó như thế này (ví dụ hư cấu):
#
Gửi mã thông báo đến víĐể gửi mã thông báo đến ví, chúng tôi 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 tôi sẽ thiết lập các biến của chúng tôi cho phù hợp.
Một lần nữa - đây là một ví dụ về giao diện của nó nếu chúng ta sử dụng ví dụ hư cấu của mình:
Bạn vẫn có quyền 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:
Chúng tôi sẽ gửi 2 mã thông báo đầu tiên của mình, Testtoken
, đến địa chỉ nước ngoài.
Một vài điều đáng chỉ ra:
- Chúng tôi buộc phải gửi ít nhất tối thiểu 1 ada (1000000 Lovelace) đến địa chỉ nước ngoài. Chúng tôi không thể chỉ gửi mã thông báo. Vì vậy, chúng ta cần tính giá trị này vào đầu ra của mình. Chúng tôi sẽ tham chiếu giá trị đầu ra của địa chỉ từ xa với biến receiver_output.
- Ngoài địa chỉ nhận, chúng ta cũng cần đặt địa chỉ của chính mình làm đầu ra bổ sung. Vì chúng tôi không muốn gửi mọi thứ chúng tôi có đến địa chỉ từ xa, nên chúng tôi sẽ sử dụng địa chỉ của chính mình để nhận mọi thứ khác đến từ đầu vào.
- Do đó, địa chỉ riêng của chúng tôi cần nhận tiền của chúng tôi, trừ đi phí giao dịch cũng như tối thiểu 1 ada chúng tôi cần gửi đến địa chỉ khác và
- tất cả các mã thông báo mà txhash hiện đang nắm giữ, trừ đi các mã thông báo chúng tôi gửi.
Vì chúng tôi sẽ gửi 2 trong số các mã thông báo đầu tiên của mình đến địa chỉ từ xa nên chúng tôi còn lại 999998 Testtoken
cũng như 1000000 SecondTesttoken
bổ sung.
Đây là giao dịch raw
trông như thế nào:
Một lần nữa, chúng ta sẽ tính phí và lưu nó vào một biến.
Như đã nêu ở trên, chúng tôi cần tính toán phần còn lại sẽ được gửi trở lại địa chỉ của chúng tôi. Logic là: TxHash Amount
— fee
— min Send 10 ada in Lovelace
= the output for our own address
Hãy cập nhật giao dịch:
Kí tên:
Gửi nó:
Sau vài giây, bạn, người nhận, sẽ có mã thông báo của mình. Đối với ví dụ này, một ví testnet Daedalus được sử dụng.
#
Đốt mã thông báoTrong phần cuối của vòng đời mã thông báo, chúng tôi 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 tôi:
Vì chúng tôi đã gửi mã thông báo đi, nên chúng tôi cần điều chỉnh số lượng Testtoken mà chúng tôi sẽ gửi. :::
Hãy đặt các biến của chúng tôi cho phù hợp (nếu chưa được đặt). Các biến như địa chỉ và tên mã thông báo cũng phải được đặt.
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.
Như thường lệ, chúng ta cần tính phí. Để tạo sự khác biệt tốt hơn, chúng tôi đặt tên biến là burnfee :
Tính toán giá trị đầu ra chính xác
Xây dựng lại giao dịch với số tiền chính xác
Ký giao dịch:
Gửi nó:
Kiểm tra địa chỉ của bạn:
Bây giờ bạn sẽ có ít hơn 5000 mã thông báo so với trước đây: