https://docs.klaytnapi.com/tutorial/wallet-transaction-api/wallet-transaction-contract-execute
위 문서에서
스마트 컨트랙트 함수를 실행하려면 실행하려는 함수의 바이트코드가 필요합니다. 함수의 바이트코드는 스마트 컨트랙트를 배포할 때 Solidity 컴파일러로 컨트랙트 코드를 컴파일하여 얻을 수 있습니다.
input
: 실행할 스마트 컨트랙트 함수의 바이트코드입니다. Solidity로 작성한 스마트 컨트랙트를 솔리디티 컴파일러로 컴파일하면 얻습니다.
로 설명되어있는데, input은 함수의 바이트코드가 아니라 함수실행을 위한 transaction의 input (function selector와 parameter)로 보입니다. 수정이 필요할 듯 합니다.
또 문서에서 KAS에서 function execution 및 call이 가능하다고 안내되어있는데 call에 대한 예제가 없습니다.
해당부분은 아직 미구현인가요?
안녕하세요, 클레이튼 포럼에 질문 올려주셔서 감사드립니다.
- 네 의견 감사드립니다. Docs에는 수정이 될 수 있도록 하겠습니다.
- 현재 call에 대한 API는 없으며, 내년 초에 추가될 예정입니다. caver-js와 Node API를 이용하시면 컨트랙트 call을 쉽게 하실 수 있습니다. 아래 코드를 참고 부탁드립니다.
// test.js
const Caver = require('caver-js')
const accessKeyId = "{{your_accessKeyId}}";
const secretAccessKey = "{{your_secretAccessKey}}";
const option = {
headers: [
{name: 'Authorization', value: 'Basic ' + Buffer.from(accessKeyId + ':' + secretAccessKey).toString('base64')},
{name: 'x-chain-id', value: '8217'},
]
}
const caver = new Caver(new Caver.providers.HttpProvider("https://node-api.klaytnapi.com/v1/klaytn", option))
async function testFunction() {
const abi = [{"constant":true,"inputs":[],"name":"count","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"getBlockNumber","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_count","type":"uint256"}],"name":"setCount","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"}]
const contractInstance = new caver.contract(abi, '0x{smart contract address}')
const value = await contractInstance.methods.get('testKey').call()
console.log(value)
}
testFunction()
감사합니다.