{"id":20573852,"url":"https://github.com/soohoio/swap-bot","last_synced_at":"2026-05-28T18:31:26.329Z","repository":{"id":62630381,"uuid":"495354896","full_name":"soohoio/swap-bot","owner":"soohoio","description":"Klayswap 기반 자동 토큰 스왑 봇","archived":false,"fork":false,"pushed_at":"2022-11-30T08:50:41.000Z","size":230,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":4,"default_branch":"main","last_synced_at":"2025-03-06T10:41:56.850Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"JavaScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/soohoio.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2022-05-23T10:07:19.000Z","updated_at":"2022-06-14T08:58:28.000Z","dependencies_parsed_at":"2023-01-22T05:48:18.264Z","dependency_job_id":null,"html_url":"https://github.com/soohoio/swap-bot","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/soohoio/swap-bot","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/soohoio%2Fswap-bot","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/soohoio%2Fswap-bot/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/soohoio%2Fswap-bot/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/soohoio%2Fswap-bot/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/soohoio","download_url":"https://codeload.github.com/soohoio/swap-bot/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/soohoio%2Fswap-bot/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":33622067,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-26T15:22:16.424Z","status":"online","status_checked_at":"2026-05-28T02:00:06.440Z","response_time":99,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2024-11-16T05:29:21.579Z","updated_at":"2026-05-28T18:31:26.277Z","avatar_url":"https://github.com/soohoio.png","language":"JavaScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"#### 🚨 본 문서에 스왑 봇 설치 및 실행방법을 상세히 적어두었으니 반드시 문서를 모두 읽고 봇을 사용하시기 바랍니다.\n\n\n# Swap-Bot\nKlayswap 기반 자동 토큰 스왑 봇  \n\n\n# 사용 목적\n클레이튼 지갑 내 KLAY 및 각종 토큰 자산을 주기적으로 특정 토큰으로 스왑하여 송금 지갑으로 전송합니다.  \n예를 들면, 매출 EOA에 쌓이는 다양한 종류의 토큰을 테더로 자동스왑하여 통합할 때 사용할 수 있습니다.  \n\n\n# Requirements\n- Serverless 프레임워크가 설치되어 있어야 합니다.\n- AWS Credential이 필요합니다.\n\n## Setup (Serverless \u0026 AWS Credential)\n#### Serverless 설치\n```\nnpm install -g serverless\n```\n이후 설치 과정 및 AWS Credential 등록은 자세한 과정은 아래 링크를 참조해주세요.\n\n- [공식문서 - Serverless 설치](https://www.serverless.com/framework/docs/getting-started)\n- [공식문서 - AWS 연결](https://www.serverless.com/framework/docs/providers/aws/guide/credentials)\n- [블로그](https://velog.io/@jeffyoun/Serverless-%ED%94%84%EB%A0%88%EC%9E%84%EC%9B%8C%ED%81%AC-%EC%82%AC%EC%9A%A9%ED%95%B4%EC%84%9C-%EB%B0%B0%ED%8F%AC%ED%95%98%EA%B8%B0)\n\n## Installation\n```\ngit clone https://github.com/soohoio/swap-bot\n```\n```\nnpm install\n```\n\n# Setting\n## 환경변수 설정\n1. `config/config-sample.js`에서 각종 환경변수를 설정해 줍니다.\n  - **NODE_URL** : KAS 노드 엔드포인트 ('https://node-api.klaytnapi.com/v1/klaytn')\n  - **KAS_ACCESS_KEY_ID**\n  - **KAS_SECRET_ACCESS_KEY**\n  - **SOURCE_ADDRESS** : 출금 지갑(스왑 대상 토큰이 들어있는 지갑)의 주소\n  - **SOURCE_PRIVATE_KEY** : 출금 지갑의 Private Key\n  - **DESTINATION_ADDRESS** : 송금 지갑의 주소(출금 지갑 주소와 동일한 주소로 설정할 수 있습니다.)\n  - **FROM_TOKENS** : 스왑을 진행할 토큰 목록. (토큰명을 쉼표( **,** )로 분리하여 작성해 주시기 바랍니다.)\n  - **TO_TOKEN** : 어떤 토큰으로 스왑을 진행할 것인지 (토큰명)\n  - **SLIPPAGE** : 슬리피지 제한 [default: 0.003(0.3%)]\n  - **RESERVED_KLAY** : 스왑 진행 시 남겨둘 KLAY 양(단위: KLAY)\n    - Swap을 진행하기 위해서는 가스비로 사용될 KLAY가 필요하기 때문에, 최소 가스비 이상의 KLAY를 지갑에 남겨두어야 합니다.\n    - 만약 RESERVED_KLAY값이 가스비(약 0.1~0.3KLAY)보다 작다면 스왑 컨트랙트 실행에 실패할 수 있습니다.\n  - **WKLAY_ADDRESS** : (optional) WKLAY(Wrapped Klaytn)의 컨트랙트 주소\n    - WKLAY_ADDRESS를 입력하면, 스왑을 진행하기 전 가지고 있는 모든 WKLAY를 KLAY로 인출하는 과정을 수행합니다.\n\n  \u003e 본 Bot은 FROM_TOKEN에 해당하는 **잔고 전체(KLAY 제외)** 를 TO_TOKEN으로 스왑합니다.  \n  만약 `FROM_TOKENS=KDAI,oETH,KLAY` 이고 `TO_TOKEN=oUSDT` 라면, swap 실행 시 지갑 내 KDAI와 oETH **토큰 전량** 이 oUSDT로 스왑되어 **DESTINATION 계좌** 로 옮겨지고,\n  **SOURCE 계좌** 에는 **(RESERVED_KLAY - 가스비)** 만큼의 KLAY만 남게 됩니다.  \n\n2. 파일명을 변경해 줍니다.\n\n`config-sample.js` -\u003e `config.js`\n\n\n## 토큰 목록 설정\n`tokens-dev.json`, `tokens-prod.json`에서 토큰 목록을 추가 / 삭제할 수 있습니다.  \n반드시 `{name: \u003c토큰 Symbol\u003e, address: \u003c컨트랙트 주소\u003e}`의 format으로 추가하셔야 하며,\n토큰명은 체인 상의 token symbol을 기입해 주시기 바랍니다.\n\n## serverless 설정\n#### 0. `serverless-sample.yml`의 파일명을 변경해 줍니다.  \n`serverless-sample.yml` -\u003e `serverless.yml`\n\n\n#### 1. 먼저 org와 application name을 설정해 주어야 합니다.  \n  swap-bot 루트 폴더로 이동 후 아래 명령어를 실행합니다.\n```\nserverless\n```\n위 명령어를 실행하면 아래 질문들에 org와 application 이름을 자유롭게 입력해 주시면 됩니다.\n```\n- What org do you want to add this service to?\n- What application do you want to add this to?\n(- What do you want to name this application?)\n```\n \norg와 app name 설정 이후 [Serverless 대시보드](https://app.serverless.com/)에서 app name이 정상적으로 등록되었는지 확인해 주세요.  \n```\nDo you want to deploy now?\n```\norg와 application 이름 등록 후 위와 같이 지금 deploy할 것인지 묻는데요, 일단 deploy하지 마시고 아래 설정을 모두 마치신 후 아래 [Deploy](https://github.com/soohoio/swap-bot/blob/main/README.md#deploy)의 절차를 따라 주시기 바랍니다.\n\n\n#### 2. (serverless-sample.yml 37~38행) Swap 봇이 주기적으로 실행될 시간을 설정해 줍니다.\n```\nevents:\n  # 매주 월요일 오전 11:00(한국시) 실행 (02:00UTC)\n  - schedule: \n      rate: cron(0 2 ? * MON *)\n```\n[LAMBDA schedule expression 참고](https://docs.aws.amazon.com/ko_kr/lambda/latest/dg/services-cloudwatchevents-expressions.html)  \n* 이외에도 aws region 등 기타 설정들 또한 자유롭게 설정하시면 됩니다.  \n\n\n\n# Deploy\n서버리스 프레임워크를 통해 Swap 봇을 AWS 상에 배포합니다.\n```\nnpm run deploy:dev\n```\n```\nnpm run deploy:prod\n```\n\n\u003e 봇을 deploy하기 전 내부 파일시스템에 Liquidity Pool의 정보를 최신화하는 작업을 수행합니다.  \n\u003e 따라서 기존의 서버리스에 deploy하는 명령어(serverless deploy)로 deploy 수행 시 liquidity pool이 최신화 되지 않을 수 있습니다.  \n\u003e liquidity pool이 추가/변경/삭제되었거나 token 목록을 추가/삭제하는 경우, deploy를 다시 수행해 주시기 바랍니다.  \n\n\n# Manually Swap\n수동으로 swap을 실행합니다.\n```\nnpm run swap:dev\n```\n```\nnpm run swap:prod\n```\n\n# 보내는 토큰 / 받는 토큰 / 보내는 토큰 양을 지정하여 스왑 함수 실행\n* 로컬에서만 작동 가능합니다.  \n* singleSwap 함수를 실행하기 전에 반드시 updatePools을 진행해야 합니다. (빌드 시 자동으로 진행됩니다.)\n* \u003cfrom\u003e 토큰 \u003camount\u003e만큼을 \u003cto\u003e토큰으로 스왑합니다.\n```\nfrom=KLEVA to=oUSDT amount=100000000000 npm run singleSwap:dev:local\n```\n```\nfrom=oUSDT to=KDAI amount=500000 npm run singleSwap:prod:local\n```\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fsoohoio%2Fswap-bot","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fsoohoio%2Fswap-bot","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fsoohoio%2Fswap-bot/lists"}