KID
2월 2, 2022, 12:32오후
1
KAS API를 이용해 Contract의 token balance를 얻은 데이터와 실제 klaytn scope에서 볼 수 있는 token balance의 데이터가 다른 경우가 존재하는거 같아서 문의드립니다.
delay상의 문제라기엔 데이터의 갭이 크고 특정 컨트랙트만 데이터가 안맞는거 같은데 이유를 알 수 있을가요?
(추가) 컨트랙트 token history API 외에 컨트랙트의 token balance 데이터르 얻을 수 있는 API가 있을까요?
제공해 주신 링크는 @KID 님 개인계정에 연결되어있기 때문에 접근이 불가능하네요, 캡쳐화면 등으로 공유가 해주실수 있으신가요?
그리고 token balance를 말씀하시는 부분은 특정 지갑에 KIP7 잔고를 말씀하시는 것인가요? 아니면 total supply 를 말씀하시는건가요? 가장 정확한정보는 언제나 웹사이트에 표기되어있는 부분보다는 블럭체인에서 바로 조회하는 방법입니다.
사용하신 아래의 API의 경우, 해당 API가 일반적으로 scope보다는 최신정보라고 생각합니다.
https://refs.klaytnapi.com/ko/tokenhistory/latest#operation/getListOfTokenByOwnerAdress
만약, 원하시는게, 특정 컨트랙트가 보유하고있는 토큰 A의 balance를 원하시는 것이면,
caver-js-ext-kas 를 이용한 경우
const kip7Token = caver.kct.kip7.create(<token contract address>)
const kip7Decimals = await kip7Token.decimals()
const kip7Balance = await kip7Token.balanceOf(<target contract address>)
const currentBalance = kip7Balance / 10**kip7Decimals
이런식으로 받아오실 수 있습니다.
감사합니다.
먼저 답변 감사합니다. 답변주신 방법으로도 시도해보겠습니다.
아래는 질문 드렸던 내용 캡처해서 다시 문의드립니다. 문의드렸던 내용은 total supply는 아니고 특정 컨트랙트 지갑의 보유 토큰 잔고입니다.
일단 KAS API와 Klayscope상의 balance 차이가 나타나는 것이 저도 확인되었습니다.
KlaySwap LP이기 때문에, 클레이스왑의 스왑비도 확인해봤는데, Klayscope쪽 정보가 더 정확한것으로 확인되었습니다.
caver를 이용해, 직접 노드에서 호출해 확인해본결과도 동일합니다. 아래와 같이 진행되었습니다.
const CaverExtKAS = require('caver-js-ext-kas');
require('dotenv').config({ path: '.env' }) // .env 파일에서 로그인정보 받아옴.
const chainId = process.env.CHAIN_ID
const accessKeyId = process.env.ACCESS_KEY;
const secretAccessKey = process.env.SECRET_ACCESS_KEY;
const caver = new CaverExtKAS(chainId, accessKeyId, secretAccessKey)
async function checkBalance(walletAddress, tokenAddress) {
const kip7Token = new caver.kct.kip7(tokenAddress)
const tokenSymbol = await kip7Token.symbol()
const tokenBalance = await kip7Token.balanceOf(walletAddress)
const tokenDecimals = await kip7Token.decimals()
console.log(tokenSymbol, ":", tokenBalance / 10**tokenDecimals)
}
walletAddress = '0x64e58f35e9d4e2ab6380908905177ce150aa8608' \\ KSP-KDAI LP
tokenAAddress = '0x5c74070fdea071359b86082bd9f9b3deaafbe32b' \\ KSP token
tokenBAddress = '0xc6a2ad8cc6e4a7e08fc37cc5954be07d499e7654' \\ KDAI token
checkBalance(walletAddress, tokenAAddress).then(checkBalance(walletAddress, tokenBAddress))
그리고 결과는 다음과 같습니다.
KSP : 12463.024663016482
KDAI : 73200.25639571242
KAS 의 KlaytnAPI의
ttps://th-api.klaytnapi.com/v2/account/{address}/contract
를 이용한 경우는 말씀하신 것처럼
KSP: 13460.504780986957019566,
KDAI: 60098.774485019964609948
로 나오네요. 이 부분은 해당 개발팀에게 말씀드려야 할것 같습니다. 제보해 주셔서 감사합니다.
1개의 좋아요
_Mike
2월 2, 2022, 11:29오후
5
안녕하세요,
KAS제품팀입니다.
저희 KAS를 이용해주시어 대단히 감사합니다.
문의주신 내용은 내부 확인 후 답변을 드릴 수 있도록 하겠습니다.
감사합니다.
KAS제품팀 드림,
1개의 좋아요
안녕하세요.
질문자와 다른 사용자이오나, 답변해주신 방법이 도움이 되어 관련 질문을 드립니다.
위의 안내해주신 방법대로 caver-js 를 이용하여 토큰의 balance를 조회하였습니다.
그러면,
Q. caver-js를 이용하여 보유하고 있는 토큰의 리스트 정보를 어떻게 불러올수있는지 문의드립니다.
→ Klaytn scope에서 특정 어카운트 어드레스로 조회를 했을시 조회되는 Token balance의 리스트를 알고 싶습니다.
답변 안내해주시면 감사드리겠습니다!
1개의 좋아요