Smart contract 호출을 통한 DEX swap 비율 조회방법?

안녕하세요, 인프런 강의들을 보고서 클레이튼 네트워크 및 스마트 컨트랙에 대해서 공부 중입니다.

제가 DEX에서 smart contract(ex. klayswap Factory의 estimatePos, Factory - KLAYswap)를 호출해보고 싶습니다.

Klaytn IDE에서 제가 직접 만든 함수 호출은 잘 되는데, 이미 배포되어 있는(위 기능의 경우 Contract address 0xc6a2ad8cc6e4a7e08fc37cc5954be07d499e7654에 있는 것 같습니다) 컨트랙을 호출해서 swap 비율을 조회하고자 하면 어떻게 해야 할까요?

클레이튼 스코프에서 뜨는 Contract 내용에는 해당 함수가 안보이네요…

관련해서 내용을 열심히 구글링 해봐도 나오지 않아 질문 올려봅니다. 감사합니다.

1 Like

해당 수량을 확인하실 토큰을 caver로 KIP7 객체를 생성하셔서 balanceOf 메소드를 이용해 LP컨트랙트 주소에대한 잔고를 확인하시면됩니다.

만약 LP가 클레이와 페어인경우에는 LP컨트랙트 주소의 객체를 KIP7으로.생성해, 기본메소드인 balance 를 통해 클레이 잔고 확인이 가능하십니다.

이 두 잔고 비율과 총 유동성을 이용해, 스왑 모델인 k = tokenA x tokenB 의 수식을 적용해 (여기서 k는 lp 발행된 lp토큰 수량이 일정하다는 가정에서 상수) 스왑하시는 토큰 수량에 따른 슬리피지 고려하신 계산이 가능한데, 공부하시는 측면에서 접근하시는 것이면 이부분 직접 고려해서 계산해보시는것도 좋을것 같습니다.

이 이외에도 스왑 프로토콜에서 쉽게 비율 구할수있는 view 함수를 제공하고있는경우도 있기때문에 이부분은 해당 스왑 프로토콜 팀에 문의를 주시는게 빠를것이라 생각됩니다.

예를들어 스왑비를 계산하고싶으시면 estimatePos 와 같은 함수가 있는데 구체적인 사용법은 support@klayswap.com 에 문의주시거나, docs.klayswap.com 의 문서를 참고해주시면 될것같습니다.

도움되셨길 바랍니다.감사합니다.

3 Likes

답변 감사합니다.

제가 좀 더 근본적으로 궁금한것은, deploy된 contract address만 있으면 해당 함수를 호출할 수 있는 것이 맞나요?

맞다면 해당 contract address에 포함된 함수 이름이나 기능을 확인하기 위해서는 개발팀에 문의를 꼭 해야 하는 것인가요, 아니면 클레이튼 스코프 등에서 조회를 해볼 수가 있나요? 개인적으로 개발을 하고 있는데 함수 사용법을 알기 위해 매번 회사에 연락을 하면 빠른 답변을 받기도 힘들것 같아서요ㅠ

1 Like

그건 리소스를 요청하는 방법에 따라 다를것이라 생각됩니다.

일단 정보는

Contract - KLAYswap 에 거의 소개가되어있는 부분이라,

특정 컨트랙트에 해당하는 interfact 파일이나 ABI파일 요청해보셔도되고, 직접작성하시다가 파라미터 이해 안되는부분을 정리해서 이메일 드리거나, 이해가 쉽게 독스 수정제안을 하신다거나 하는 방법이 있습니다.

단 해당 부분은, 클레이튼 측에서 지원하는 부분은 아니고, 이 커뮤니티에 KlaySwap 관계자가 계신부분은 아니라 클레이튼 개발팀에서 기술지원을 해주기에는 좀 힘든 토픽이라 생각합니다.

솔직히 질문하시기 나름인데, 만약 KlaySwap의 컨트랙트의 함수를 따와서, 인터페이스 만들어서 트랜잭선 실행시 에러가 난 경우에, 사용하신 소스와 오류메시지 등을 공유하시고, 트랜잭션이 실패한 이유를 물어보신다면 아마 그 부분에는 어느정도 답변을 드릴수 있을거라 생각합니다.

만약 질문이 단순히 '솔리디티로 작성한 컨트랙트 내에서 외부 컨트랙트를 어떻게 실행하는지’ 이셨다면

이는 solidity로 Interface 라는 객체를 작성하시면됩니다. 이는 사용하시는 솔리디티 컴파일러 버젼에따라 조금씩 다를수는 있지만 아래 링크에서 설명되어있습니다.

https://docs.soliditylang.org/en/v0.8.11/contracts.html#interfaces

이렇게 interface를 정의하신 후, 그 인터페이스 이름이
IMyInterface 인경우, 그리고 그 인터페이스에 exchangePos 라는 함수가 있는경우

IMyInterface(contract address).exchangePos(…)

이런 형태로 컨트랙트 내부에서 실행하시면됩니다.
도움되셨길 바랍니다.

또한 해당 질문을 올리시고, 답을 어떻게든 얻으신 경우, 직접 해결한 방법을 답변달아주신다면 커뮤니티 발전에 더 도움이 될것같아요. 감사합니다!

네, 다시 한번 답변 감사합니다.

제가 궁금한 점은 klayswap에만 국한된 것은 아니고, 여러 swap을 다 사용해보려고(마치 DEX aggregator 기능처럼) 해서 드린 질문입니다.

더 공부해서 해결 방법을 찾은 후 다시 글 남겨보도록 하겠습니다. 감사합니다.

2 Likes