스마트 컨트랙트 함수 호출 방법 질문드립니다!

안녕하세요.

현재 KIP-17 기반으로 NFT 컨트랙을 truffle을 통해 Testnet에 배포 완료했습니다.

해당 컨트랙의 함수(민트 등)를 호출하고 싶은데요, klaytn IDE의 경우 IDE에서 바로 해당 함수를 호출해서 트랜잭션을 날리던데요,

트러플로 배포한 경우 caver-js와 같은 sdk를 사용하지 않는 경우 어떻게 함수를 호출 할 수 있나요?
json-rpc-api를 사용해보려고 문서를 확인해봤으나 호출하는 함수명을 지정하는 방법등을 잘 모르겠어서 질문드립니다 ㅠㅠ

안녕하세요. 클레이튼 포럼에 글을 남겨주셔서 감사합니다.
아쉽게도 스마트컨트랙트 호출은 rpc api로는 할 수 없습니다.
컨트랙 주소로 caver-js에서 컨트랙 객체를 얻어 함수호출 시도해보시는걸 추천드립니다.

1 Like

caver나 web3등의 sdk를 사용하는 것이 훨씬 편합니다.
굳이 안쓰시겠다고 하시면…
원하는 함수의 abi를(compile하면 생성됩니다) parameter를 채워서 encode하여 data에 넣어 sendTransaction을 호출하시면 될 것 같네요.

2 Likes

스마트 컨트랙트를 호출하는 방법은 크게 2가지 방법이 있습니다.

  • 스마트 컨트랙트의 state를 변경하지않는 함수의 경우
  • 스마트 컨트랙트의 state를 변경하는 함수를 호출할 경우

state를 변경여부에 대한 판단은 직접 solidity 공식문서를 보고 파악하시기 바랍니다.

첫번째 방법 : 스마트 컨트랙트의 state를 변경하지않는 함수의 경우는 klay_call json/rpc를 통해서 호출할 수 있습니다.
두번째 방법 : 스마트 컨트랙트의 state를 변경하는 함수를 호출할 경우는 SmartContractExecution transaction을 직접 만들어서 klay_sendRawTransaction 혹은 klay_sendTransaction을 통해서 호출할 수 있습니다.

문제는 첫번째 방법이나 두번째 방법 모두 input 필드를 요구한다는 점인데, 이 input필드는 스마트컨트랙트를 호출하기 위한 인코딩 데이터가 필요합니다. 이 인코딩된 데이터를 만드는 룰도 솔리디티 공식문서에 나와있으니 참고해보시면 좋을 것 같습니다.
이 인코딩 된 input필드는 직접 만드실 순 있으나 많은 불편함이 있기에, input 데이터를 만들어 줄 수 있는 caver나 web3등을 사용하여 input을 만들어서 직접 rpc API를 호출 하실 수 있을 것 같습니다.

2 Likes