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)

Thực hiện hợp đồng thông minh

TxTypeSmartContractExecution thực thi hợp đồng thông minh với dữ liệu được cung cấp. TxTypeSmartContractExecution chỉ được chấp nhận nếu "to" là tài khoản hợp đồng thông minh.

Loại giao dịch này có thể tạo tài khoản, chuyển mã thông báo, triển khai hợp đồng thông minh, thực hiện hợp đồng thông minh hoặc thực hiện kết hợp những hoạt động đã đề cập ở trên.

Nhập các gói @kaiachain/viem-ext để thêm các tính năng kaia trên web3

Tạo publicClient bằng createPublicClient, được cấu hình để tương tác với mạng thử nghiệm Kaia Kairos (kairos) thông qua phương thức truyền tải HTTP (http()). Máy khách công khai được sử dụng cho các hoạt động chỉ đọc, chẳng hạn như truy vấn chuỗi khối hoặc đọc trạng thái hợp đồng thông minh, mà không yêu cầu khóa riêng tư hoặc khả năng ký.

Thiết lập ứng dụng ví bằng createWalletClient, được cấu hình bằng chuỗi Kairos, phương thức truyền tải HTTPkhóa riêng của người gửi được chuyển đổi thành tài khoản.

Đặt địa chỉ hợp đồng mà bạn muốn thực hiện vào trường đến và đặt ABI.

Mã hóa tên hàm và tham số bằng hàm encodeFunctionData

Tạo yêu cầu giao dịch để thực hiện hợp đồng thông minh bằng cách sử dụng prepareTransactionRequest. Chỉ định loại giao dịch (TxType.smartContractExecution)

Gửi giao dịch tới blockchain. Hàm sendTransaction ký nội bộ bằng khóa riêng của tài khoản và sau đó truyền nó đến mạng blockchain.

publicClient gọi hàm number trên hợp đồng thông minh, hàm này sẽ truy xuất giá trị hiện tại được lưu trữ trong trạng thái của hợp đồng.

smartContractExecution.js

import {
http,
encodeFunctionData,
createWalletClient, createPublicClient, kairos,
TxType,
privateKeyToAccount
} from "@kaiachain/viem-ext";
const publicClient = createPublicClient({
chain: kairos,
transport: http(),
});
const senderWallet = createWalletClient({
chain: kairos,
transport: http(),
account: privateKeyToAccount(
"0x0e4ca6d38096ad99324de0dde108587e5d7c600165ae4cd6c2462c597458c2b8"
),
});
// Example usage
(async () => {
const contractAddr = "0x95Be48607498109030592C08aDC9577c7C2dD505";
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 data = encodeFunctionData({
abi,
args: [Date.now()],
functionName: "setNumber",
});
const tx = await senderWallet.prepareTransactionRequest({
type: TxType.SmartContractExecution,
account: senderWallet.account,
to: contractAddr,
value: 0,
data,
});
console.log("preparedTx", tx);
const sentTx = await senderWallet.sendTransaction(tx);
console.log("contract interaction tx", sentTx);
const result = await publicClient.readContract({
address: contractAddr,
abi,
functionName: 'number'
})
console.log('Current contract value', result);
})();

output

❯ node smartContractExecution.js
preparedTx {
type: 48,
account: {
address: '0xA2a8854b1802D8Cd5De631E690817c253d6a9153',
nonceManager: undefined,
sign: [AsyncFunction: sign],
signAuthorization: [AsyncFunction: signAuthorization],
signMessage: [AsyncFunction: signMessage],
signTransaction: [AsyncFunction: signTransaction],
signTypedData: [AsyncFunction: signTypedData],
source: 'privateKey',
type: 'local',
publicKey: '0x04dc9dccbd788c00fa98f7f4082f2f714e799bc0c29d63f04d48b54fe6250453cdaf06ca34ae8714cf3dae06bacdb78c7c2d4054bd38961d40853cd5f15955da79'
},
to: '0x95Be48607498109030592C08aDC9577c7C2dD505',
value: 0,
data: '0x3fb5c1cb000000000000000000000000000000000000000000000000000001977b9b017d',
from: '0xA2a8854b1802D8Cd5De631E690817c253d6a9153',
nonce: 2384,
chainId: 1001,
gas: 27953n,
gasPrice: '0x66720b300',
gasLimit: 69882
}
contract interaction tx 0x50d708b08ae4de72e9e52212eb48ec317032c2d7d06620b615d819ecdf004e8f
Current contract value 1750125336184n

Cải thiện trang này