본문으로 건너뛰기
이 페이지는 영문에서 기계 번역되었으므로 오역이나 어색한 표현이 있을 수 있습니다. 따라서 정확한 정보는 영어 원문을 참조하시기 바랍니다. 또한 잦은 업데이트로 인해 일부 콘텐츠는 영문이 그대로 남아있을 수 있습니다. Crowdin에서 이 페이지의 번역을 개선하는 데 동참하여 도움을 주세요. (Crowdin translation page, Contributing guide)

쓰기

컨트랙트의 일부 상태를 업데이트해야 할 때 스마트 컨트랙트와 상호작용하는 **"트랜잭션"**을 만들 수 있습니다.

웹3에서 Kaia 기능을 추가하려면 @Kaia체인/ethers-ext 모듈을 가져옵니다.

Kaia 블록체인과의 읽기 전용 상호작용을 위해 퍼블릭 클라이언트를 초기화합니다.

Kairos 체인**, HTTP 전송, 계정으로 변환된 발신자의 개인 키로 구성된 createWalletClient를 사용하여 지갑 클라이언트를 설정합니다.

솔리디티 코드에서 생성된 Abi를 설정합니다.

상호작용할 계약 주소를 정의하세요.

writeContract` 메서드는 컨트랙트에서 setNumber 함수를 호출하는 데 사용되며, 인자로 Date.now()(밀리초 단위의 현재 타임스탬프)를 전달합니다. 이렇게 하면 트랜잭션이 생성되고 전송되어 컨트랙트의 number 변수를 업데이트합니다.

퍼블릭 클라이언트를 사용하여 컨트랙트에서 number 함수(상태를 수정하지 않는 보기 함수)를 쿼리합니다. 그러면 숫자 변수의 현재 값이 검색되며, 이 값은 이전 트랜잭션에서 설정한 타임스탬프(성공한 경우)를 반영해야 합니다.

smartContractWrite.js

import {
createPublicClient,
http,
kairos,
privateKeyToAccount,
createWalletClient
} from "@kaiachain/viem-ext";
const publicClient = createPublicClient({
chain: kairos,
transport: http(),
});
const walletClient = createWalletClient({
chain: kairos,
transport: http(),
account: privateKeyToAccount(
// using legacy account only for this example
"0x71c5a2d04d744d76492640fb3e5cf2650efae106655f27baffc482c53f57dca2"
),
});
// Example usage
(async () => {
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 address = "0x95Be48607498109030592C08aDC9577c7C2dD505";
const txHash = await walletClient.writeContract({
address,
abi,
functionName: 'setNumber',
args: [Date.now()]
})
console.log('tx hash', txHash);
const result = await publicClient.readContract({
address,
abi,
functionName: 'number'
})
console.log('Current contract value', result);
})();

output

❯ node smartContractWrite.js
tx hash 0xf890d27d3cb4670755391257477c4f942ecb3fd0974e1863c2cd0bc72bfae0d4
Current contract value 123n

페이지를 개선해 주세요