Nhảy tới nội dung
This page uses machine translation from English, which may contain errors or unclear language. For the most accurate information, please see the original English version. Some content may be in the original English due to frequent updates. Help us improve this page's translation by joining our effort on Crowdin. (Crowdin translation page, Contributing guide)

Cách tích hợp tính năng ủy quyền phí vào ví

Nhờ tính năng ủy quyền phí gốc của Kaia, người dùng có thể thực hiện các giao dịch miễn phí gas trên các ứng dụng phi tập trung (dApps). Để kích hoạt tính năng này, các phải hỗ trợ các loại giao dịch ủy quyền phí và thực hiện ký tên người gửi.

Hướng dẫn này dành cho ai

Hướng dẫn này dành cho các nhà cung cấp ví. Ví của bạn chỉ triển khai phần phía người gửi:

  • Ký các giao dịch được ủy quyền bằng khóa của người dùng
  • Trả về senderTxHashRLP cho dApp

Việc ký tên và phát sóng của người thanh toán phí không thuộc trách nhiệm của ví. Các tác vụ này được xử lý bởi phần backend của ứng dụng phi tập trung (dApp) hoặc một dịch vụ được quản lý như Dịch vụ ủy quyền phí Kaia.

Quy trình từ đầu đến cuối (các vai trò)

Việc ủy quyền thu phí luôn liên quan đến cùng một nhóm các bên liên quan. Sơ đồ dưới đây thể hiện toàn bộ lộ trình; các phần sau sẽ sử dụng lại sơ đồ này và làm nổi bật đối tượng đang được đề cập.

BướcAiTrách nhiệm
1Ví (của bạn)Ký giao dịch được ủy quyền về phí và trả về senderTxHashRLP. Không được phát sóng.
2dAppChuyển tiếp senderTxHashRLP cho người thanh toán phí.
3Người nộp phíKý lại và gửi giao dịch đã được ký đầy đủ cho Kaia.

Trang này trình bày chi tiết về bước 1. Các bước 2–3 được tóm tắt ở phần cuối kèm theo các liên kết đến hướng dẫn đầy đủ.

Những tính năng mà ví phải hỗ trợ

Đây là bước 1 trong quy trình — phần duy nhất mà ví của bạn phải triển khai.

Để hỗ trợ tính năng ủy quyền thanh toán phí, hãy thực hiện các bước sau trong ví của bạn:

  1. Thêm Kaia SDK (ví dụ: @kaiachain/ethers-ext) vào cơ sở mã của ví.
  2. Khi ví nhận được yêu cầu giao dịch ủy quyền phí (thường thông qua hàm kaia_signTransaction), hãy ký giao dịch đó bằng SDK Kaia bằng khóa của người dùng.
  3. Trả về senderTxHashRLP cho dApp. Không được gửi giao dịch từ ví đến một nút Kaia.
Danh sách kiểm tra dành cho các nhà cung cấp ví điện tử
  • Hỗ trợ các loại giao dịch được ủy quyền bằng phí (chuyển khoản, thực hiện hợp đồng và các loại khác nếu cần thiết)
  • Ký bằng khóa người gửi (người dùng) do ví quản lý
  • Trả về senderTxHashRLP cho dApp
  • Không được phát sóng giao dịch chỉ được ký bởi người gửi

Ví dụ: ký xác nhận giao dịch chuyển giá trị được ủy quyền thu phí

Hãy sử dụng mẫu này trong quy trình ký của ví của bạn (ví dụ: bên trong trình xử lý kaia_signTransaction). Trong môi trường sản xuất, hãy sử dụng khóa của người dùng do ví quản lý — chứ không phải khóa riêng được mã hóa cứng — và trả về senderTxHashRLP cho bên gọi.


const ethers = require("ethers6");
const { Wallet, TxType, parseKaia } = require("@kaiachain/ethers-ext/v6");
const senderAddr = "0xa2a8854b1802d8cd5de631e690817c253d6a9153";
const senderPriv = "0x0e4ca6d38096ad99324de0dde108587e5d7c600165ae4cd6c2462c597458c2b8";
const receiverAddr = "0xc40b6909eb7085590e1c26cb3becc25368e249e9";
const provider = new ethers.JsonRpcProvider("https://public-en-kairos.node.kaia.io");
const senderWallet = new Wallet(senderPriv, provider);
async function main() {
const tx = {
type: TxType.FeeDelegatedValueTransfer,
from: senderAddr,
to: receiverAddr,
value: parseKaia("0.01"),
};
// Wallet: populate and sign as sender, then return RLP to the dApp
const populatedTx = await senderWallet.populateTransaction(tx);
const senderTxHashRLP = await senderWallet.signTransaction(populatedTx);
console.log("senderTxHashRLP", senderTxHashRLP);
// return senderTxHashRLP; // ← wallet returns this to the dApp (do not broadcast)
}

Ví dụ: thực hiện giao dịch ký kết hợp đồng ủy quyền thu phí


const ethers = require("ethers6");
const { Wallet, TxType } = require("@kaiachain/ethers-ext/v6");
const senderAddr = "0xa2a8854b1802d8cd5de631e690817c253d6a9153";
const senderPriv = "0x0e4ca6d38096ad99324de0dde108587e5d7c600165ae4cd6c2462c597458c2b8";
const provider = new ethers.JsonRpcProvider("https://public-en-kairos.node.kaia.io");
const senderWallet = new Wallet(senderPriv, provider);
const contractAddr = "0x95Be48607498109030592C08aDC9577c7C2dD505";
const abi = ["function setNumber(uint256 newNumber)"];
async function main() {
const contract = new ethers.Contract(contractAddr, abi, provider);
const data = contract.interface.encodeFunctionData("setNumber", ["0x123"]);
const tx = {
type: TxType.FeeDelegatedSmartContractExecution,
from: senderAddr,
to: contractAddr,
value: 0,
data: data,
};
// Wallet: populate and sign as sender, then return RLP to the dApp
const populatedTx = await senderWallet.populateTransaction(tx);
const senderTxHashRLP = await senderWallet.signTransaction(populatedTx);
console.log("senderTxHashRLP", senderTxHashRLP);
// return senderTxHashRLP; // ← wallet returns this to the dApp (do not broadcast)
}

ghi chú

Cách kết nối dây cụ thể phụ thuộc vào kiến trúc ví của bạn. Điều quan trọng là: khi ký các loại hợp đồng được ủy quyền, hãy chỉ định người gửi, trả về senderTxHashRLP và không phát sóng.

Ngoài ví: người thanh toán phí ký tên

Sau khi ví trả về senderTxHashRLP, ứng dụng phi tập trung (dApp) sẽ chuyển tiếp giá trị này (bước 2), sau đó người thanh toán phí sẽ ký và gửi (bước 3). Phần được đánh dấu bên dưới là người thanh toán phí — đây không phải là mã ví.


// Fee payer / backend only — not wallet code
const sentTx = await feePayerWallet.sendTransactionAsFeePayer(senderTxHashRLP);
console.log("sentTx", sentTx);
const rc = await sentTx.wait();
console.log("receipt", rc);

Để tìm hiểu cách người trả phí nhận senderTxHashRLP và gửi giao dịch (một bản demo đơn giản về mô hình máy khách/máy chủ — không phải tích hợp ví), hãy xem Ví dụ về ủy quyền phí. Để biết thêm thông tin về người thanh toán phí được ủy quyền, vui lòng tham khảo Dịch vụ ủy quyền thanh toán phí Kaia.

Các bước tiếp theo

Mục tiêuHướng dẫn
Hiểu về các loại giao dịch ủy quyền phíỦy quyền phí, Ủy quyền phí một phần
Xem bản demo về người thanh toán theo mô hình máy khách/máy chủ (không phải mã ví)Ví dụ về ủy quyền phí xây dựng
Sử dụng dịch vụ quản lý người thanh toán phí của Kaia cho các ứng dụng phi tập trung (dApps)Tích hợp Dịch vụ ủy quyền phí Kaia
Tài liệu tham khảo SDK cho các giao dịch ủy quyền phíChuyển giao giá trị được ủy quyền thông qua phí Ethers-Ext
Cải thiện trang này