Klayswap 기반 자동 토큰 스왑 봇
클레이튼 지갑 내 KLAY 및 각종 토큰 자산을 주기적으로 특정 토큰으로 스왑하여 송금 지갑으로 전송합니다.
예를 들면, 매출 EOA에 쌓이는 다양한 종류의 토큰을 테더로 자동스왑하여 통합할 때 사용할 수 있습니다.
- Serverless 프레임워크가 설치되어 있어야 합니다.
- AWS Credential이 필요합니다.
npm install -g serverless
이후 설치 과정 및 AWS Credential 등록은 자세한 과정은 아래 링크를 참조해주세요.
git clone https://github.com/soohoio/swap-bot
npm install
config/config-sample.js
에서 각종 환경변수를 설정해 줍니다.
- NODE_URL : KAS 노드 엔드포인트 ('https://node-api.klaytnapi.com/v1/klaytn')
- KAS_ACCESS_KEY_ID
- KAS_SECRET_ACCESS_KEY
- SOURCE_ADDRESS : 출금 지갑(스왑 대상 토큰이 들어있는 지갑)의 주소
- SOURCE_PRIVATE_KEY : 출금 지갑의 Private Key
- DESTINATION_ADDRESS : 송금 지갑의 주소(출금 지갑 주소와 동일한 주소로 설정할 수 있습니다.)
- FROM_TOKENS : 스왑을 진행할 토큰 목록. (토큰명을 쉼표( , )로 분리하여 작성해 주시기 바랍니다.)
- TO_TOKEN : 어떤 토큰으로 스왑을 진행할 것인지 (토큰명)
- SLIPPAGE : 슬리피지 제한 [default: 0.003(0.3%)]
- RESERVED_KLAY : 스왑 진행 시 남겨둘 KLAY 양(단위: KLAY)
- Swap을 진행하기 위해서는 가스비로 사용될 KLAY가 필요하기 때문에, 최소 가스비 이상의 KLAY를 지갑에 남겨두어야 합니다.
- 만약 RESERVED_KLAY값이 가스비(약 0.1~0.3KLAY)보다 작다면 스왑 컨트랙트 실행에 실패할 수 있습니다.
- WKLAY_ADDRESS : (optional) WKLAY(Wrapped Klaytn)의 컨트랙트 주소
- WKLAY_ADDRESS를 입력하면, 스왑을 진행하기 전 가지고 있는 모든 WKLAY를 KLAY로 인출하는 과정을 수행합니다.
본 Bot은 FROM_TOKEN에 해당하는 잔고 전체(KLAY 제외) 를 TO_TOKEN으로 스왑합니다.
만약FROM_TOKENS=KDAI,oETH,KLAY
이고TO_TOKEN=oUSDT
라면, swap 실행 시 지갑 내 KDAI와 oETH 토큰 전량 이 oUSDT로 스왑되어 DESTINATION 계좌 로 옮겨지고, SOURCE 계좌 에는 (RESERVED_KLAY - 가스비) 만큼의 KLAY만 남게 됩니다.
- 파일명을 변경해 줍니다.
config-sample.js
-> config.js
tokens-dev.json
, tokens-prod.json
에서 토큰 목록을 추가 / 삭제할 수 있습니다.
반드시 {name: <토큰 Symbol>, address: <컨트랙트 주소>}
의 format으로 추가하셔야 하며,
토큰명은 체인 상의 token symbol을 기입해 주시기 바랍니다.
serverless-sample.yml
-> serverless.yml
swap-bot 루트 폴더로 이동 후 아래 명령어를 실행합니다.
serverless
위 명령어를 실행하면 아래 질문들에 org와 application 이름을 자유롭게 입력해 주시면 됩니다.
- What org do you want to add this service to?
- What application do you want to add this to?
(- What do you want to name this application?)
org와 app name 설정 이후 Serverless 대시보드에서 app name이 정상적으로 등록되었는지 확인해 주세요.
Do you want to deploy now?
org와 application 이름 등록 후 위와 같이 지금 deploy할 것인지 묻는데요, 일단 deploy하지 마시고 아래 설정을 모두 마치신 후 아래 Deploy의 절차를 따라 주시기 바랍니다.
events:
# 매주 월요일 오전 11:00(한국시) 실행 (02:00UTC)
- schedule:
rate: cron(0 2 ? * MON *)
- 이외에도 aws region 등 기타 설정들 또한 자유롭게 설정하시면 됩니다.
서버리스 프레임워크를 통해 Swap 봇을 AWS 상에 배포합니다.
npm run deploy:dev
npm run deploy:prod
봇을 deploy하기 전 내부 파일시스템에 Liquidity Pool의 정보를 최신화하는 작업을 수행합니다.
따라서 기존의 서버리스에 deploy하는 명령어(serverless deploy)로 deploy 수행 시 liquidity pool이 최신화 되지 않을 수 있습니다.
liquidity pool이 추가/변경/삭제되었거나 token 목록을 추가/삭제하는 경우, deploy를 다시 수행해 주시기 바랍니다.
수동으로 swap을 실행합니다.
npm run swap:dev
npm run swap:prod
- 로컬에서만 작동 가능합니다.
- singleSwap 함수를 실행하기 전에 반드시 updatePools을 진행해야 합니다. (빌드 시 자동으로 진행됩니다.)
- 토큰 만큼을 토큰으로 스왑합니다.
from=KLEVA to=oUSDT amount=100000000000 npm run singleSwap:dev:local
from=oUSDT to=KDAI amount=500000 npm run singleSwap:prod:local