Bắt đầu với cardano-wallet-js
#
cardano-wallet-jscardano-wallet-js
là một SDK javascript/typescript cho Cardano với một số chức năng. Bạn có thể sử dụng nó như một khách hàng cho ví cardano chính thức cardano-wallet và cũng có thể tạo ra Native Tokens and NFTs.
#
Table of Contents#
Giới thiệucardano-wallet chính thức của IOHK cho thấy giao diện REST api / CLI cho phép khách hàng thực hiện các công việc phổ biến trên blockchain cardano, chẳng hạn như:
- tạo hoặc khôi phục một ví
- gửi một giao dịch có hoặc không có siêu dữ liệu (https://github.com/input-output-hk/cardano-wallet/wiki/TxMetadata)
- kiểm tra trạng thái của node
- liệt kê các giao dịch
- liệt kê các ví
Dự án của chúng tôi nhằm mục đích cung cấp một SDK Javascript dễ sử dụng cho các lập trình viên, thay vì đưa cấu trúc REST thô cho bạn.
#
Yêu cầuTrước khi bắt đầu sử dụng thư viện, bạn sẽ cần một máy chủ cardano-wallet
đang chạy. Nếu bạn có sẵn docker, bạn chỉ cần tải docker-composer.yml
mà họ cung cấp và khởi động nó bằng cách sử dụng docker-compose
:
note
Bạn có thể tìm thêm thông tin về các tùy chọn khác nhau để khởi động máy chủ cardano-wallet tại đây (https://github.com/input-output-hk/cardano-wallet)
#
Cài đặtSử dụng npm:
#
Sử dụngĐể bắt đầu, hãy bắt đầu với một WalletServer
. Nó cho phép bạn kết nối với một số dịch vụ cardano-wallet
từ xa.
#
Kết nối với cardano-wallet#
Thông tin BlockchainĐầu tiên, bạn có thể thử lấy một số thông tin blockchain như: (thông số mạng, thông tin và đồng hồ) (network parameters, information and clock)
Nhận thông tin mạng
Nó sẽ in ra như sau:
Nhận thông số mạng
Nó sẽ in ra như sau:
Nhận thời gian mạng
Nó sẽ in ra như sau:
#
Sự vận hành hữu dụng#
Generate Recovery PhrasesViệc tạo cụm từ khôi phục dựa vào bip39.
important
Cụm từ khôi phục là cách duy nhất bạn có thể khôi phục ví của mình và bạn nên giữ nó bảo mật và riêng tư. Mỗi lần bạn thực hiện phương pháp này, bạn sẽ nhận được một cụm từ khôi phục hoàn toàn khác nhau .
Để thuận tiện, bạn có thể chuyển đổi cụm từ khôi phục thành một mảng bằng cách sử dụng:
#
Create or restore a walletTrong ví dụ này, chúng ta sẽ tạo một ví mới. Phương pháp createOrRestoreShelleyWallet
tạo ra một ví mới nếu nó không tồn tại hoặc khôi phục một ví đã tồn tại:
List wallets:
Get wallet by Id:
Get wallet's utxo statistics:
Thống kê sẽ bao gồm phân phối UTxOs trên toàn bộ ví, dưới dạng biểu đồ tương tự như biểu đồ dưới đây.
Remove wallet:
Rename wallet:
Change wallet passphrase:
note
Bản thân ví không giữ mật khẩu, bạn có thể kiểm tra xem nó được cập nhật chính xác không bằng cách gọi một phương thức cần cụm mật khẩu, ví dụ: sendPayment
#
Wallet addressesVí Cardano được xác định phân cấp nhiều tài khoản tuân theo một biến thể của BIP-44 được mô tả ở đây (https://github.com/input-output-hk/implementation-decisions/blob/e2d1bed5e617f0907bc5e12cf1c3f3302a4a7c42/text/1852-hd-chimeric.md). Tất cả các địa chỉ đều bắt nguồn từ khóa gốc (giống như một nhà máy sản xuất khóa) mà bạn có thể lấy từ cụm từ khôi phục. Ngoài ra, ví sẽ luôn có 20 địa chỉ "liên tiếp" không được sử dụng, vì vậy bất cứ lúc nào bạn sử dụng một trong số chúng, địa chỉ mới sẽ được tạo ra để giữ nguyên quy tắc.
Get unused addresses:
Get used addresses:
You can create/discover next unused address:
#
Wallet balancesKhi bạn tạo ra một ví mà số dư ban đầu là O. Nếu bạn đang trong mạng mainet, bạn có thể chuyển Ada đến địa chỉ này. Nếu bạn đang ở testnet, bạn có thể yêu cầu token thử nghiệm từ Faucet, chỉ cần nhập một trong các địa chỉ ví của bạn và yêu cầu tiền.
#
Wallet delegationVí có các thông tin về việc đã ủy quyền trên pool hay chưa
Ví chưa ủy quyền cho bất kỳ pool nào thì kết quả tương tự như sau:
Nếu bạn bắt đầu ủy quyền (xem phần Stake poolStake pool section, thì sẽ không hiện ra thông tin trên, nhưng phầnnext
sẽ cho biết lần ủy quyền cuối cùng là khi nào.
Việc ủy quyền khi đó sẽ giống như sau:
note
Tài sản changes_at
sẽ cho biết epoch khi ủy quyền có hiệu lực
Nếu chúng ta hỏi lại sau/trong epoch 10, chúng ta sẽ nhận được sự hủy bỏ:
#
Stake pool operations with the walletNhận danh sách xếp hạng pool stake theo phần thưởng thành viên:
note
Bạn sẽ nhận pool được sắp xếp theo non_myopic_member_rewards
từ phần thưởng dự kiến cao nhất đến thấp hơn. Mặc định là chủ ví không được cấu hình để chạy siêu dữ liệu của pool (ví dụ: mã, tên, trang chủ) nhưng bạn có thể chỉ rõ nó thông qua chức năng cài đặt cập nhật, hãy xem phần cài đặt cập nhật bên dưới.
Ước tính phí ủy quyền
note
Lần đầu tiên bạn ủy quyền cho một pool, bạn sẽ mất thêm 2 ADA. Khoản này là khoản ký quỹ, bạn sẽ nhận lại khi bạn không tham gia ủy thác nữa.
Ủy quyền cho pool:
note
Trạng thái giao dịch ban đầu được đặt vào pending
, vì vậy bạn nên tiếp tục theo dõi giao dịch bằng cách dùng id
để đảm bảo trạng thái cuối cùng ( ví dụ in_ledger
). Bạn có thể tìm hiểu thêm về vòng đời của giao dịch tại đây (https://github.com/input-output-hk/cardano-wallet/wiki/About-Transactions-Lifecycle).
Để ủy quyền cho một pool khác thì cũng sử dụng phương pháp ở trên.
Rút phần thưởng của pool:
note
Bạn có thể gửi phần thưởng tới nhiều địa chỉ bằng cách chia nhỏ ra. Bạn cũng có thể gửi nó đến bất kỳ địa chỉ hợp lệ nào dù nó có trong ví của bạn hay không.
Ngừng ủy quyền:
Các hoạt động bảo trì pool:
Các giá trị có thể là:
- not_applicable -> chúng tôi hiện không truy vấn máy chủ SMASH cho siêu dữ liệu
- not_started -> Việc thu gom dữ liệu không thích hợp vẫn chưa bắt đầu, hãy thử lại sau một thời gian ngắn
- restarting -> Việc thu gom dữ liệu không thích hợp hiện đang khởi động lại, hãy thử lại sau một thời gian ngắn
- has_run -> Việc thu gom dữ liệu không thích hợp đã chạy thành công :::note Hoạt động bảo trì sẽ phụ thuộc vào việc máy chủ ví có sử dụng máy chủ tổng hợp siêu dữ liệu Stakepool Metadata Aggregation Server (SMASH) hay không.
:::
Bắt đầu thu thập dữ liệu không thích hợp theo cách thủ công:
#
Wallet transactionsNhận giao dịch ví:
Nhận chi tiết giao dịch:
Nhận phí thanh toán:
Chuyển khoản thanh toán. Lưu ý là bạn không phải tính phí tối thiểu, mà SDK sẽ thực hiện điều đó:
note
Bạn có thể chuyển một danh sách gồm cả địa chỉ và số tiền. Chúng tôi mong đợi là 2 danh sách này có cùng độ dài trong đó các thành phần trên mỗi danh sách được chỉ dẫn có liên quan đến danh sách kia. Bạn có thể nghĩ nó như là gửi amounts[i]
tới addresses[i]
.
Chuyển khoản thanh toán với siêu dữ liệu:
Siêu dữ liệu có thể được thể hiện dưới dạng đối tượng JSON với một số giới hạn:
- Tất cả keys mức cao phải là số nguyên từ 0 đến 264 - 1
- Mỗi giá trị siêu dữ liệu được gắn với loại của nó.
- Chuỗi phải có nhiều nhất 64 bytes khi được mã hóa UTF-8.
- Bytestrings được mã hóa hex với độ dài tối đa là 64 bytes.
Để biết thêm thông tin kiểm tra tại đây (https://github.com/input-output-hk/cardano-wallet/wiki/TxMetadata).
warning
Lưu ý rằng siêu dữ liệu cung cấp trong một giao dịch sẽ được lưu trữ trên blockchain mãi mãi. Đảm bảo rằng không bao gồm bất kỳ dữ liệu dạy cảm nào, cụ thể là thông tin nhận dạng cá nhân (PII).
Gửi một đối tượng siêu dữ liệu phức tạp hơn:
note
Các giá trị như boolean, null và undefined được chuyển dưới dạng chuỗi (ví dụ "true", "null", "undefined").
Quên giao dịch:
Nếu vì lý do nào đó mà giao dịch của bạn bị treo ở trạng thái pending
trong một thời gian dài, bạn có thể cân nhắc để "hủy" nó.
important
Một giao dịch khi đã được gửi đi thì không thể bị hủy bỏ. Người ta chỉ có thể yêu cầu quên nó đi để thử chi tiêu (đồng thời) cùng một UTxO trong một giao dịch khác. Tuy nhiên, giao dịch có thể vẫn hiển thị sau đó trong một block và do đó sẽ xuất hiện trong ví.
#
Submit external transactionBạn có thể chuyển một giao dịch được tạo ra từ bên ngoài (bằng các công cụ khác) và gửi nó vào blockchain. Bạn cũng có thể sử dụng thư viện này để tạo giao dịch ngoại tuyến. Đây là một ví dụ:
#
Key handlingCó một cặp phương pháp bạn có thể sử dụng để lấy và nhận được cặp khóa riêng tư/công khai. Để biết thêm thông tin, hãy kiểm tra tại đây . (https://docs.cardano.org/projects/cardano-wallet/en/latest/About-Address-Derivation.html).
Get root key from recovery phrase Nhận khóa gốc từ cụm từ khôi phục
Lấy khóa riêng tư/ký (còn được gọi là khóa chi tiêu) từ khóa gốc
Derive account key from root Lấy khóa tài khoản từ gốc
Tất cả các phương pháp đề cập ở trên trả về một Bip32PrivateKey
mà bạn có thể tiếp tục lấy và tạo ra các khóa và địa chỉ, hãy kiểm tra ở đây (https://docs.cardano.org/projects/cardano-serialization-lib/en/latest/) để biết thêm thông tin. Ví dụ, giả sử bạn đã cài đặt cardano-serialization-lib
, bạn có thể nhận được một địa chỉ stake như sau:
Ký và xác minh một tin nhắn bằng việc sử dụng cặp khóa riêng tư/công khai.
#
Native TokensBạn có thể tạo ra token gốc bằng cách tạo ra một giao dịch với một vài điểm khác biệt, đây là một ví dụ:
note
Bạn có thể kiểm tra các tập lệnh trên test/assets.ts
,, ví dụ này tương đương với "RequireSignature" mà bạn có thể tạo ra bằng JSON:
#
Send Native TokensỞ đây bạn có hai lựa chọn, dựa trực tiếp vào ví cardano hoặc tự xây dựng tx.
#
Using Cardano Wallet#
Building the tx#
Test#
StackBạn cần cài đặt stak >= 1.9.3 Bạn có thể tìm nó ở đây: https://docs.haskellstack.org/en/stable/README/. Bạn có thể cần cài đặt các thư viện phát triển libsodium-dev, libghc-hsopenssl-dev, gmp, sqlite và systemd để quá trình xây dựng thành công.
Bạn cũng cần các tệp nhị phân cardano-node
và cardano-cli
có sẵn trên PATH của mình.
Các bước thiết lập khá đơn giản:
clone: cardano-wallet
execute: stack install cardano-wallet:exe:local-cluster
Đặt một cổng cụ thể export CARDANO_WALLET_PORT=7355
để ví luôn luôn bắt đầu ở cùng một cổng.