본문으로 건너뛰기

Value Transfer

TxTypeValueTransfer는 사용자가 KAIA를 전송하고자 할 때 사용됩니다.

  • As kaia provides multiple transaction types to make each transaction type serve a single purpose, TxTypeValueTransfer is limited to send KAIA to an externally owned account (EOA).

feeDelegation

Import the ethers and @kaiachain/ethers-ext packages to add kaia features on ethers.js

Define sender address, sender private key and reciever address

Set up the provider with the specified kairos testnet URL. A provider in ethers is a read-only abstraction to access the blockchain data.

Also, you can change the provider URL from kairos to quicknode

Create sender and fee payer wallets from private keys.

Declare transaction with the fields such as type, from, to, value.

Populating transaction with additional information with senderWallet.populateTransaction

Signing the transaction with the sender's private key

Send the transaction to blockchain using fee payer's wallet. Function sendTransactionAsFeePayer adds a signature with FeePayer’s private key to the sender’s signature and transmits it to the blockchain network.

Wait for the transaction receipt.

TxTypeFeeDelegatedValueTransfer.js

const { Wallet, TxType, parseKlay } = require("@kaiachain/ethers-ext/v6");
const ethers = require("ethers");
const senderAddr = "0xa2a8854b1802d8cd5de631e690817c253d6a9153";
const senderPriv = "0x0e4ca6d38096ad99324de0dde108587e5d7c600165ae4cd6c2462c597458c2b8";
const feePayerAddr = "0xcb0eb737dfda52756495a5e08a9b37aab3b271da";
const feePayerPriv = "0x9435261ed483b6efa3886d6ad9f64c12078a0e28d8d80715c773e16fc000cff4";
const recieverAddr = "0xc40b6909eb7085590e1c26cb3becc25368e249e9";
async function main() {
const provider = new ethers.JsonRpcProvider("https://public-en-kairos.node.kaia.io");
const senderWallet = new Wallet(senderPriv, provider);
const feePayerWallet = new Wallet(feePayerPriv, provider);
let tx = {
type: TxType.FeeDelegatedValueTransfer,
to: recieverAddr,
value: parseKlay("0.01"),
from: senderAddr,
};
tx = await senderWallet.populateTransaction(tx);
console.log(tx);
const senderTxHashRLP = await senderWallet.signTransaction(tx);
console.log("senderTxHashRLP", senderTxHashRLP);
const sentTx = await feePayerWallet.sendTransactionAsFeePayer(senderTxHashRLP);
console.log("sentTx", sentTx);
const rc = await sentTx.wait();
console.log("receipt", rc);
}
main();

output

❯ node TxTypeFeeDelegatedValueTransfer.js
senderTxHashRLP 0x09f8878203ab850ba43b740082cd1494c40b6909eb7085590e1c26cb3becc25368e249e9872386f26fc1000094a2a8854b1802d8cd5de631e690817c253d6a9153f847f8458207f6a06b4fdf5a4769285549e3bdfec4ba6db98f3439e8a148df1f55b7387a7c207947a0705b7c07749ab7aadab88a6e412a66f1985d821d56104b75d5a5ee6c03924e42
sentTx 0xbd5ca6525bc3364b68846b314e5d621333dd7df4054cbb76f67e5ea9c2aaef33
receipt {
to: '0xC40B6909EB7085590E1c26Cb3beCC25368e249E9',
from: '0xA2a8854b1802D8Cd5De631E690817c253d6a9153',
contractAddress: null,
transactionIndex: 1,
gasUsed: BigNumber { _hex: '0x7918', _isBigNumber: true },
logsBloom: '0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000',
blockHash: '0xfa10dadd1783e0fa65729336cd14bc8197ae0e15c3e42c3cc505b9fce85ebcac',
transactionHash: '0xbd5ca6525bc3364b68846b314e5d621333dd7df4054cbb76f67e5ea9c2aaef33',
logs: [],
blockNumber: 148722215,
confirmations: 2,
cumulativeGasUsed: BigNumber { _hex: '0x034b1d', _isBigNumber: true },
effectiveGasPrice: BigNumber { _hex: '0x05d21dba00', _isBigNumber: true },
status: 1,
type: 0,
byzantium: true
}

페이지를 개선해 주세요