안녕하세요.
caver-java-ext 사용하여 KIP7 잔액 조회를 구현하다가 문의사항이 생겨 질문드립니다.
현재 KAS 에서는 아직 KIP7을 위한 인터페이스는 개발중이라고 알고 있어서 직접 토큰 조회를 구현중에 있습니다.
node(caver-js-ext)에서는 KIP7 토큰의 잔액 조회 구현이 간단했습니다.
let caver = new CaverExtKAS(chainId, accessKeyId, secretAccessKey);
let contract = new caver.klay.Contract(ABI, contractAddress);
let balance = await contract.methods.balanceOf(fromAddress).call();
위 코드와 같이 CaverExtKAS 객체를 만들어 주고 DefaultABI로 컨트랙트 객체 생성 후,
balanceOf method를 호출하면 토큰 잔액이 정상적으로 조회됩니다.
java에서는 caver-java-ext 라이브러리만 사용하기에는 여의치 않아 caver-core 라이브러리도 함께 사용했습니다만,
따로 클레이튼 메인넷 EN을 따로 운영하고 있지 않기에, RPC를 직접 사용하는 caver-core는 사용이 어려울 것 같고,
가능한 KAS와 caver-java-ext 라이브러리에서 제공되는 인터페이스만 이용하여 기본적인 기능을 구현해보는 것을 테스트해보고 있습니다.
일단 java에서의 KIP7에 대한 조회는 다음과 같이 구현하였습니다.
CaverExtKAS caver = CaverExtKAS.initKASAPI(chainId, accessKeyId, secretAccessKey);
// for 'balanceOf' function encode
Function function = StandardKIP7ContractFunctions.balanceOf(owner);
CallObject obj = CallObject.createCallObject();
obj.setTo(contractAddress);
obj.setData(FunctionEncoder.encode(function));
Response<String> response = caver.rpc.klay.call(obj).send();
List<Type> decoded = FunctionReturnDecoder.decode(response.getResult(), function.getOutputParameters());
CallObject obj는 다음과 같습니다.
obj = {com.klaytn.caver.methods.request.CallObject@12510}
from = null
// contractAddress
to = "0xf32..................................................."
gasLimit = null
gasPrice = null
value = null
// 'balanceOf' + 0 pad + ownerAddress
data = "0x70a08231000000000000000000000000bf.............................."
curl로도 baobab public EN으로 호출도 시도했습니다.
curl -X POST --data '{"jsonrpc":"2.0","method":"klay_call","params":[{"to": "0xf32...............", "data":"0x70a08231000000000000000000000000bf........................"}, "latest"],"id":67}' -H "Content-Type: application/json" https://api.baobab.klaytn.net:8651/
response 결과는 다음과 같이 0로 조회됩니다.
{"jsonrpc":"2.0","id":67,"result":"0x0000000000000000000000000000000000000000000000000000000000000000"}
제가 생각하기엔 encoded된 data hex가 문제 있어서 안되는 것일까 추측해보는데요…
그 외에는 무엇이 잘못되었는지 예상이 잘 안되는 상황입니다 ㅠ…
코드상의 문제인지 혹시 놓치거나 실수한 부분이 있는지 여쭤봅니다.
감사합니다.