本页面使用机器翻译自英语,可能包含错误或不清楚的语言。如需最准确的信息,请参阅英文原文。由于更新频繁,部分内容可能与英文原文有出入。请加入我们在 Crowdin 上的努力,帮助我们改进本页面的翻译。 (Crowdin translation page, Contributing guide)
写入(智能合约执行 TxType)
导入 ethers 和 @kaiachain/ethers-ext 模块,在 ethers.js 上添加 kaia 功能。
定义发件人地址和私人密钥
使用指定的 kairos 测试网 URL 设置提供程序。 以太坊中的提供者是访问区块链数据的只读抽象。
此外,您还可以将提供商 URL 从 kairos 更改为 quicknode
用发件人私钥和Web3 提供商创建钱包
设置由 solidity 代码生成的 Abi
定义与之交互的合约地址
使用 ethers.Contract创建合约实例,填写参数 contractAddr、abi、provider。 您可以通过该实例读写合约
使用方法counter.number()获取更新前的数字值
创建事务数据以更新编号值
用上一步的数据创建一个事务对象,其类型为 SmartContractExecution
向区块链发送 tx。 函数 "sendTransaction "使用账户的私钥进行内部签名,然后将其传输到区块链网络。
如果已在区块链中完成发送,wait函数将返回发送回执。
使用方法 counter.number() 获取更新值 number
writeTxType.js
const ethers = require("ethers");const { Wallet, TxType } = require("@kaiachain/ethers-ext/v6");const senderAddr = "0x24e8efd18d65bcb6b3ba15a4698c0b0d69d13ff7";const senderPriv = "0x4a72b3d09c3d5e28e8652e0111f9c4ce252e8299aad95bb219a38eb0a3f4da49";const provider = new ethers.JsonRpcProvider("https://public-en-kairos.node.kaia.io");const wallet = new Wallet(senderPriv, provider);/* compiled in remix.ethereum.org (compiler: 0.8.18, optimizer: false)// SPDX-License-Identifier: UNLICENSEDpragma solidity ^0.8.13;contract Counter { uint256 public number; event SetNumber(uint256 number); constructor(uint256 initNumber) { number = initNumber; } function setNumber(uint256 newNumber) public { number = newNumber; emit SetNumber(number); } function increment() public { number++; emit SetNumber(number); }}*/const abi = '[{"inputs":[{"internalType":"uint256","name":"initNumber","type":"uint256"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"number","type":"uint256"}],"name":"SetNumber","type":"event"},{"inputs":[],"name":"increment","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"number","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"newNumber","type":"uint256"}],"name":"setNumber","outputs":[],"stateMutability":"nonpayable","type":"function"}]';const contractAddr = "0x95Be48607498109030592C08aDC9577c7C2dD505";async function main() { const counter = new ethers.Contract(contractAddr, abi, wallet); console.log("number before", (await counter.number()).toString()); const data = (await counter.populateTransaction.increment()).data; const tx = { type: TxType.SmartContractExecution, from: senderAddr, to: contractAddr, value: 0, data: data, }; const sentTx = await wallet.sendTransaction(tx); console.log("sentTx", sentTx.hash); const receipt = await sentTx.wait(); console.log("receipt", receipt); console.log("number after", (await counter.number()).toString());}main();
output
❯ node writeTxType.jsnumber before 292sentTx 0x2af4d70ac12b5bedd960200e1791cd06c5ea110acb196c8156837570a158452ereceipt { to: '0x95Be48607498109030592C08aDC9577c7C2dD505', from: '0x24e8eFD18D65bCb6b3Ba15a4698c0b0d69d13fF7', contractAddress: null, transactionIndex: 0, gasUsed: BigNumber { _hex: '0x6d6e', _isBigNumber: true }, logsBloom: '0x00000000000040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000001200000002', blockHash: '0x91742c5e371cb44f335f2e7e944d0a340bd4bc0f2004197b689020431d72cf74', transactionHash: '0x2af4d70ac12b5bedd960200e1791cd06c5ea110acb196c8156837570a158452e', logs: [ { transactionIndex: 0, blockNumber: 148740675, transactionHash: '0x2af4d70ac12b5bedd960200e1791cd06c5ea110acb196c8156837570a158452e', address: '0x95Be48607498109030592C08aDC9577c7C2dD505', topics: [Array], data: '0x0000000000000000000000000000000000000000000000000000000000000125', logIndex: 0, blockHash: '0x91742c5e371cb44f335f2e7e944d0a340bd4bc0f2004197b689020431d72cf74' } ], blockNumber: 148740675, confirmations: 2, cumulativeGasUsed: BigNumber { _hex: '0x6d6e', _isBigNumber: true }, effectiveGasPrice: BigNumber { _hex: '0x05d21dba00', _isBigNumber: true }, status: 1, type: 0, byzantium: true}number after 293