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

스마트 계약 배포

TxTypeSmartContractDeploy는 지정된 주소에 스마트 컨트랙트를 배포합니다. 이 트랜잭션 유형에 따라 다음과 같은 변경 사항이 적용됩니다.

수수료 위임

웹3에서 Kaia 기능을 추가하려면 @kaiachain/viem-ext 패키지를 가져옵니다.

Kairos 체인**, HTTP 전송, 계정으로 변환된 발신자의 개인 키로 구성된 createWalletClient를 사용하여 발신자 및 수수료 납부자 지갑을 설정합니다.

발신자 계정, 수신자 주소, 전송할 값(이 예시에서는 0 KLAY), 트랜잭션 유형 (TxType.FeeDelegatedSmartContractDeploy), humanReadable: false는 컨트랙트 코드가 사람이 읽을 수 있는 소스 코드가 아닌 바이트코드임을 지정하고 codeFormat는 스마트 컨트랙트 코드가 바이트코드로 된 트랜잭션 요청을 생성합니다: 0**은 컨트랙트 코드의 형식(일반적으로 EVM 바이트코드)을 나타내고, data는 배포할 스마트 컨트랙트의 컴파일된 바이트코드를 포함합니다.

지갑 클라이언트의 signTransaction 메서드로 트랜잭션에 서명하고 트랜잭션 해시를 기록합니다.

수수료 납부자는 발신자가 이미 서명한 트랜잭션에 signTransactionAsFeePayer 함수를 사용하여 서명하고 트랜잭션 수수료를 지불하는 데 동의합니다.

완전히 서명된 수수료 위임 트랜잭션(발신자와 수수료 납부자 모두 서명)을 kaia_sendRawTransaction 메서드를 사용하여 Kairos 블록체인 네트워크에 전송하고 네트워크에서 트랜잭션 해시 또는 응답을 반환합니다.

TxTypeFeeDelegatedSmartContractDeploy.js

import { http, createWalletClient, kairos, TxType, privateKeyToAccount } from "@kaiachain/viem-ext";
const senderWallet = createWalletClient({
chain: kairos,
transport: http(),
account: privateKeyToAccount(
"0x0e4ca6d38096ad99324de0dde108587e5d7c600165ae4cd6c2462c597458c2b8"
),
})
const feePayerWallet = createWalletClient({
chain: kairos,
transport: http(),
account: privateKeyToAccount(
"0x9435261ed483b6efa3886d6ad9f64c12078a0e28d8d80715c773e16fc000cff4"
),
});
// Example usage
(async () => {
const tx = await senderWallet.prepareTransactionRequest({
type: TxType.FeeDelegatedSmartContractDeploy,
account: senderWallet.account,
value: 0,
humanReadable: false,
codeFormat: 0,
data: '0x608060405234801561001057600080fd5b5060f78061001f6000396000f3fe6080604052348015600f57600080fd5b5060043610603c5760003560e01c80633fb5c1cb1460415780638381f58a146053578063d09de08a14606d575b600080fd5b6051604c3660046083565b600055565b005b605b60005481565b60405190815260200160405180910390f35b6051600080549080607c83609b565b9190505550565b600060208284031215609457600080fd5b5035919050565b60006001820160ba57634e487b7160e01b600052601160045260246000fd5b506001019056fea2646970667358221220e0f4e7861cb6d7acf0f61d34896310975b57b5bc109681dbbfb2e548ef7546b364736f6c63430008120033',
});
const signedTx = await senderWallet.signTransaction(tx);
console.log('signedTx', signedTx)
const feePayerSignedTx = await feePayerWallet.signTransactionAsFeePayer(
signedTx
);
const sentFeePayerTx = await feePayerWallet.request({
method: "klay_sendRawTransaction",
params: [feePayerSignedTx],
});
console.log("fee payer contract deploy tx", sentFeePayerTx);
})();

output

❯ js TxTypeFeeDelegatedSmartContractDeploy.js
signedTx 0x29f9018882095985066720b3008304125a808094a2a8854b1802d8cd5de631e690817c253d6a9153b90116608060405234801561001057600080fd5b5060f78061001f6000396000f3fe6080604052348015600f57600080fd5b5060043610603c5760003560e01c80633fb5c1cb1460415780638381f58a146053578063d09de08a14606d575b600080fd5b6051604c3660046083565b600055565b005b605b60005481565b60405190815260200160405180910390f35b6051600080549080607c83609b565b9190505550565b600060208284031215609457600080fd5b5035919050565b60006001820160ba57634e487b7160e01b600052601160045260246000fd5b506001019056fea2646970667358221220e0f4e7861cb6d7acf0f61d34896310975b57b5bc109681dbbfb2e548ef7546b364736f6c634300081200338080f847f8458207f6a0ef78ab459d0c14e7a7c9ddf4594d89a335479788af2d844d0d5ea0216be562fba042b0794cd2a5bedf23361ede5aa494fe4f5f79eb66c768678b27f992a6daadab
fee payer contract deploy tx 0x8c07cbd99de8a0ff2b84bfb9c1a7e6729e93d03b86be7db091d7981e352f779f

페이지를 개선해 주세요