Skip to main content

Giao dịch đa nhân chứng

Tổng quan

note

Hướng dân này giả định rằng bạn đã hoàn thành hướng dẫn Exploring Cardano Wallets. Bạn sẽ cần một UTxO ở mỗi ví(payment1.addrpayment2.addr) để hoàn thành hướng dẫn này.

Hướng dẫn này cũng giả định rằng bạn có cardano-node chạy trên nền tảng và nối với mạng testnet.

Tóm tắt

Chúng ta hãy tóm tắt lại những gì chúng ta đã làm cho đến nay. Mục tiêu của chúng ta trong hướng dẫn trước (/docs/integrate-cardano/creating-wallet-faucet) là lấy 1000 tADA từ testnet và gửi 250 tAda từ payment1 tới payment2.

Đảm bảo rằng chúng ta ở đúng thư mục.

$ pwd
$HOME/cardano

Chúng ta đã rút 1000 tAda từ Testnet Faucet vào ví payment1 của mình.

$ cardano-cli query utxo \
--testnet-magic 1097911063 \
--address $(cat keys/payment1.addr)
TxHash TxIx Amount
--------------------------------------------------------------------------------------
264c0aa805652e3607c5ea2b1e8a9f3bf9c3bc8d4d938e1a9035f352083ba703 0 1000000000 lovelace

Chúng ta hiện có 749.825831 tAda trong ví payment1250 tAda trong ví payment2.

Hãy xem làm thế nào chúng ta có thể chi tiêu tất cả cùng một lúc!

Trường hợp sử dụng

Có nhiều lý do để bạn muốn có nhiều ví gửi ada trong một giao dịch duy nhất. Một là, chính bạn có hai ví (payment1payment2) và bạn muốn chi tiêu nó vào thứ gì đó...

  • đắt hơn số tiền bạn có trong bất kỳ ví nào trong hai ví của mình,
  • nhưng cả hai số tiền gộp lại sẽ trang trải các chi phí.

Giả sử bạn đang ở cửa hàng xe đạp và bạn nhìn thấy một cái xe đẹp với giá 1100 tAda. Bạn chỉ còn lại 999 tAda (cộng với tiền lẻ).

Chủ cửa hàng xe đạp - một người đam mê công nghệ blockchai - sẵn sàng giảm giá cho bạn 10%, nếu bạn thanh toán cho anh ta trong một giao dịch duy nhất.

  • Không có gì thay đổi cả, anh bạn* - Chủ cửa hàng Bike

Vì vậy, chúng ta cần đảm bảo chi tiêu tất cả tAda từ hai ví của mình trong một giao dịch duy nhất.

note

Anh ta có thể dễ dàng xác minh xem chúng ta đã tiêu tất cả số tiền chưa bằng cách kiểm tra xem giao dịch có hơn một đầu ra hay không.

Có nhiều cách để tối ưu hóa số tiền bạn chi tiêu. Chúng ta sẽ để điều này cho bạn tự tìm hiểu.

Quy trình kỹ thuật

This scenario is pretty straight forward and looks like this. Kịch bản này khá dễ hiểu và trông như này:

img

Như bạn có thể nhìn ở sơ đồ trên, chúng ta sẽ xây dựng và gửi một multi-witness transaction, có hai đầu vàomột đầu ra

note

Chúng ta không thể thực hiện việc này với cardano-wallet hay bất kỳ ví nào khác như Daedalus hay Yoroi bởi vì chúng ta sẽ cần cả signing-keys từ payment1payment2 để ký giao dịch.

Viết code

note

Như đã đề cập ở trên, hướng dẫn này giả sử bạn đã hoàn thành hướng dẫn Exploring Cardano Wallets

Chúng ta cũng giả định bạn đã thanh toán 174169 Lovelace phí giao dịch và số dư hiện tại của bạn là:

  • payment1: 749825831 Lovelace
  • payment2: 250000000 Lovelace

Tạo ví chủ

Nếu bạn chưa có ví thứ ba để sử dụng cho hướng dẫn này, hãy tạo một ví để chúng ta có thể chuyển tất cả tiền của mình sang.

Đảm bảo rằng bạn ở trong thư mục keys như sau: cd $HOME/cardano/keys

Tạo một cặp khóa thanh toán sử dụng cardano-cli:

cardano-cli address key-gen \
--verification-key-file $HOME/cardano/keys/store-owner.vkey \
--signing-key-file $HOME/cardano/keys/store-owner.skey

Sau đó tạo một địa chỉ ví cho mạng testnet:

cardano-cli address build \
--payment-verification-key-file $HOME/cardano/keys/store-owner.vkey \
--out-file $HOME/cardano/keys/store-owner.addr \
--testnet-magic 1097911063

Kiểm tra thư mục keys của bạn. Nó trông như sau:

$HOME/cardano/keys/
├── payment1.addr
├── payment1.skey
├── payment1.vkey
├── payment2.addr
├── payment2.skey
├── payment2.vkey
├── store-owner.addr
├── store-owner.skey
└── store-owner.vkey

0 directories, 9 files

Tính toán phí cho giao dịch

Hãy tạo một thư mục để lưu trữ các giao dịch cho hướng dẫn này và nhập nó vào:

mkdir -p $HOME/cardano/multi-witness-sample && cd $_;

Chúng ta muốn gửi tất cả tAda tại hai UTxO mà chúng ta đã xác minh trước đó và gửi nó đến store-owner.addr. Điều đó có nghĩa là chúng ta sẽ có hai đầu vào

Thế còn đầu ra? Chủ cửa hàng muốn chúng ta tiêu hết số tiền đó vì vậy sẽ có một đầu ra cho chủ cửa hàng không có đầu ra cho chúng ta.

Hãy xây dựng giao dịch đó.

cardano-cli transaction build-raw \
--tx-in b73b7503576412219241731230b5b7dd3b64eed62ccfc3ce69eb86822f1db251#0 \
--tx-in b73b7503576412219241731230b5b7dd3b64eed62ccfc3ce69eb86822f1db251#1 \
--tx-out $(cat ../keys/store-owner.addr)+0 \
--fee 0 \
--out-file tx2.draft

Điều cuối cùng chúng ta cần làm là tính toán các khoản phí chotx2.draft. Chú ý --tx-in-count--witness-count.

cardano-cli transaction calculate-min-fee \
--tx-body-file tx2.draft \
--tx-in-count 2 \
--tx-out-count 1 \
--witness-count 2 \
--testnet-magic 1097911063 \
--protocol-params-file ../protocol.json
179581 Lovelace

Chúng tôi có thể tính toán số tiền mà chủ cửa hàng sẽ nhận được, nếu cả hai UTxO đều được chi tiêu trong giao dịch:

  749825831 (payment1)
+ 250000000 (payment2)
---------
999825831
- 179581 (fee)
---------
999646250 (store-owner)
=========

Build, sign và submit giao dịch

Chúng ta biết số lượng đầu ra cũng như phí . Cuối cùng, chúng ta có thể xây dựng, ký và gửi giao dịch tx2.draft của mình.

Chúng ta phải sử dụng payment1.skeypayment2.skey`đẻ ký kết giao dịch của mình.

cardano-cli transaction build-raw \
--tx-in b73b7503576412219241731230b5b7dd3b64eed62ccfc3ce69eb86822f1db251#0 \
--tx-in b73b7503576412219241731230b5b7dd3b64eed62ccfc3ce69eb86822f1db251#1 \
--tx-out $(cat ../keys/store-owner.addr)+999646250 \
--fee 179581 \
--out-file tx2.draft

cardano-cli transaction sign \
--tx-body-file tx2.draft \
--signing-key-file ../keys/payment1.skey \
--signing-key-file ../keys/payment2.skey \
--testnet-magic 1097911063 \
--out-file tx2.signed

cardano-cli transaction submit \
--tx-file tx2.signed \
--testnet-magic 1097911063
Transaction successfully submitted

Xác minh các giao dịch có nhiều nhân chứng

Chủ cửa hàng bây giờ sẽ xác minh rằng mọi thứ đã diễn ra theo kế hoạch của anh ta.

cardano-cli query utxo \
--testnet-magic 1097911063 \
--address $(cat $HOME/cardano/keys/store-owner.addr)
TxHash TxIx Amount
--------------------------------------------------------------------------------------
258abd628eef7d6ff0f7b4e6866b4f7c21065f4d6b5e49b51e2ac4ff035ad06f 0 999646250 lovelace

Xác minh 258abd628eef7d6ff0f7b4e6866b4f7c21065f4d6b5e49b51e2ac4ff035ad06f trên cardano testnet explorer

Success!

Anh ta có thể thấy rằng giao dịch có một đầu ra vào ví của anh ta. Không có kết quả đầu ra nào khác, do đó bạn phải tiêu hết tAda.

Xin chúc mừng, bạn hiện có thể gửi các giao dịch nhiều nhân chứng trên Cardano . Điều này sẽ giúp bạn tích hợp các ứng dụng hiện có hoặc ứng dụng mới sắp ra mắt của bạn. 🎉🎉🎉