이 페이지는 영문에서 기계 번역되었으므로 오역이나 어색한 표현이 있을 수 있습니다. 따라서 정확한 정보는 영어 원문을 참조하시기 바랍니다. 또한 잦은 업데이트로 인해 일부 콘텐츠는 영문이 그대로 남아있을 수 있습니다. Crowdin에서 이 페이지의 번역을 개선하는 데 동참하여 도움을 주세요. (Crowdin translation page, Contributing guide)
수수료 위임 기능을 지갑에 통합하는 방법
Kaia의 네이티브 수수료 위임 기능 덕분에 사용자들은 디앱에서 가스 없이 거래를 즐길 수 있습니다. 하지만 이 기능을 사용하려면 지갑이 수수료 위임 거래 유형을 지원해야 합니다. 이 가이드에서는 지갑 공급자가 수수료 대납 기능을 지갑에 통합하는 방법을 설명합니다.
수수료 위임을 통합하려면 지갑 공급업체가 통합해야 합니다:
- 코드베이스에 Kaia SDK(예: kaiachain/ethers-ext)를 추가합니다.
- 지갑 공급자의 RPC 메서드인
kaia_signTransaction
이 호출될 때마다 Kaia SDK를 사용하여 트랜잭션에 서명합니다. - 결과적으로 지갑은 서명된 트랜잭션인
senderTxHashRlp
를 노드 공급자에게 직접 전송하는 대신 dApp에 반환해야 합니다. 수수료 납부자에게 이체됩니다.
다음은 간단한 가치 이전을 위한 기본 예시입니다:
const ethers = require("ethers6"); const { Wallet, TxType, parseKaia } = require("@kaiachain/ethers-ext/v6"); const senderAddr = "0xa2a8854b1802d8cd5de631e690817c253d6a9153"; const senderPriv = "0x0e4ca6d38096ad99324de0dde108587e5d7c600165ae4cd6c2462c597458c2b8"; const recieverAddr = "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: recieverAddr, value: parseKaia("0.01"), }; // Sign transaction by senderconst populatedTx = await senderWallet.populateTransaction(tx); const senderTxHashRLP = await senderWallet.signTransaction(populatedTx); console.log("senderTxHashRLP", senderTxHashRLP); }
계약 상호 작용의 경우:
const ethers = require("ethers6"); const { Wallet, TxType, parseKaia } = 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: recieverAddr, value: 0, data: data,}; // Sign transaction by senderconst populatedTx = await senderWallet.populateTransaction(tx); const senderTxHashRLP = await senderWallet.signTransaction(populatedTx); console.log("senderTxHashRLP", senderTxHashRLP); }
노트
정확한 통합 코드는 지갑의 구현 방식에 따라 다를 수 있습니다.