코인 출금 자동화

메타마스크 7개 체인과 거래소 11곳, 기다렸다가 한 번만 보내는 출금봇 2종

코인이 들어오는 즉시 파는 프로그램을 먼저 만들었고, 이번에는 코인을 옮기는 출금을 맡았습니다. 메타마스크 지갑에서 보내는 프로그램과 거래소에서 보내는 프로그램 두 개입니다. SEND를 눌러 두면 입금 전이거나 출금이 막혀 있는 동안은 기다리고, 보낼 수 있게 되는 순간 한 번 보낸 뒤 텔레그램으로 Txid를 알리고 멈춥니다. 출금은 되돌릴 수 없어서, 작업의 절반은 잘못 나가는 경우를 막는 데 들어갔습니다.

대상
EVM 7개 체인(직접 추가 가능)
국내외 거래소 11곳
특징
가능해지는 순간 1회 출금
텔레그램 Txid 알림
유형
코인 출금 자동화
Windows 실행 프로그램 2종
실행 환경
사용자 PC에서 단독 실행
키는 그 PC에만 암호화 저장
출금봇 2종 실행 화면. 왼쪽은 메타마스크 출금봇으로 지갑, 네트워크, 컨트랙트 주소, 수신 주소를 고르고 로그에 입금 대기 후 출금 완료와 Txid가 찍혀 있다. 오른쪽은 거래소 출금봇으로 거래소, 코인, 출금 열린 네트워크와 수수료, 주소록 등록 여부가 보인다
납품한 두 프로그램의 실제 화면. 지갑 주소, 컨트랙트, 수량, Txid는 모두 지어낸 예시 값입니다.

01배경과 요구사항

의뢰인은 여러 지갑과 여러 거래소에 나뉜 코인을 정해진 주소로 옮기는 일을 반복하고 있었습니다. 토큰이 지갑에 들어오는 시각이나 거래소가 출금을 여는 시각은 미리 알 수 없습니다. 그래서 화면을 켜 놓고 기다리다가, 열리는 순간 손으로 주소와 수량을 넣어 보내야 했습니다. 급하게 넣다 보면 네트워크나 주소를 틀리기 쉽고, 한 번 나간 출금은 돌아오지 않습니다.

요청은 이랬습니다.

02동작 방식

두 프로그램은 화면 구성과 흐름이 같습니다. 어디서 보낼지, 무엇을, 어느 네트워크로, 어느 주소로, 얼마나 보낼지를 정하고 SEND를 누릅니다. 그 뒤로는 프로그램이 정해진 간격으로 상태를 다시 확인합니다.

메타마스크 출금봇 화면. 지갑 W1, 네트워크 Base, 토큰 컨트랙트, 주소록에 등록된 수신 주소, All On 상태. 로그에 잔고 0 입금 대기, 전송 시뮬레이션 실패 대기, 전송 완료, 출금 완료, 텔레그램 전송 완료가 순서대로 찍혀 있다
메타마스크 출금봇. 잔고가 0인 동안과 토큰 전송이 잠겨 있는 동안은 대기하고, 풀리는 순간 전송합니다. 값은 예시입니다.

전량 출금의 계산은 보내는 곳마다 다릅니다. 토큰은 잔고 전부를 보냅니다. ETH 같은 기본 코인은 가스비만큼 남기고 보내는데, Base와 Optimism은 L1 수수료가 따로 붙어서 그 몫까지 남겨야 잔고 부족으로 거부되지 않습니다. 거래소는 네트워크마다 출금 수수료, 최소 수량, 허용 소수 자리가 다르므로 조회한 값에 맞춰 수량을 깎습니다.

거래소 출금봇 화면. 거래소 바이비트, 코인 USDT, 네트워크 Arbitrum One 출금 가능 수수료 0.3 최소 1, 수신 주소가 거래소 출금 주소록 등록 주소로 표시. 로그에 출금 막힌 네트워크 안내, 입금 대기, 출금 요청, 출금 접수, 출금 완료, Txid가 찍혀 있다
거래소 출금봇. 코인을 조회하면 지금 출금이 열린 네트워크와 수수료, 최소 수량, 주소록 등록 여부가 함께 나옵니다. 값은 예시입니다.

03실제로 있었던 문제와 고친 내용

토큰을 보내려던 화면에서 기본 코인이 나간 일

배포 직후 사용 중에 생긴 일입니다. 컨트랙트 주소 칸에는 기본값으로 기본 코인 (ETH)라는 글자가 들어 있습니다. 이 글자를 지우지 않고 그 뒤에 토큰 컨트랙트 주소를 붙여넣으면, 칸에는 토큰 주소가 보이는데 프로그램은 칸이 기본 코인으로 시작한다는 이유로 ETH 전송으로 판단했습니다. 화면에 보이는 것과 실제로 나가는 것이 달랐던, 프로그램 쪽 잘못입니다.

같은 날 수정판을 냈습니다. 기본 코인으로 인정하는 경우를 그 글자만 있을 때로 좁혔고, 글자와 주소가 섞여 있으면 주소를 기준으로 삼습니다. 칸을 클릭하면 기존 글자가 전체 선택되어 붙여넣기가 곧바로 덮어씁니다. 기본 코인을 보낼 때는 토큰 말고 기본 코인이 나간다는 확인창이 매번 뜹니다. 컨트랙트 칸에 지갑 주소를 넣으면 토큰 컨트랙트 주소가 맞지 않다고 알려 줍니다.

04잘못 나가거나 두 번 나가지 않게 하는 장치

실제로 구현해 납품한 것만 적습니다. 출금 한도나 시간 제한 같은 기능은 의뢰 범위 밖이어서 넣지 않았습니다.

05키 보관과 거래소별 차이

개인키, API 키, 텔레그램 토큰은 프로그램 설정 화면에서 사용자가 직접 넣습니다. 암호화해서 그 PC에만 저장하고, 암호화 키는 Windows 계정에 묶어 두었습니다. 폴더를 통째로 다른 PC로 복사해도 열리지 않습니다. 화면에는 키의 앞뒤 몇 글자만 보이고, 로그 파일에는 키와 시크릿이 가려진 채로 남습니다.

거래소 출금봇 설정 창의 API 키 탭. 거래소 11곳이 한 표에 나열되고 API 키는 가운데가 가려져 있으며, 거래소마다 출금 주소 규칙이 적혀 있다
설정 창의 API 키 탭. 거래소마다 다른 출금 주소 규칙을 한 표에 적어 두었습니다. 키는 예시 값입니다.

거래소 11곳은 인증 방식도 출금 절차도 서로 달랐습니다. 프로그램이 대신 처리하는 것과 사용자가 미리 해 둘 것을 나눴습니다.

06한계와 남겨 둔 것

07납품 결과물

08기술 스택

Python 3.10 (64bit) tkinter GUI EVM JSON-RPC, ERC-20 eth-account (로컬 서명) 거래소 11곳 출금 REST (HMAC, JWT 서명) Fernet 암호화, Windows DPAPI 텔레그램 Bot API pytest PyInstaller

09관련 사례

입금되는 즉시 매도하는 프로그램을 만든 뒤 이어서 맡은 작업입니다.

※ 본 사례는 과거 고객 요구사항을 익명 처리하여 재구성한 것이며, 화면의 주소, 수량, Txid는 예시 값입니다. 수익률과 수익금은 공개하지 않습니다. 알고랩은 매매 자동화 프로그램 제작 서비스이며, 종목 추천, 투자 자문, 수익 보장 서비스가 아닙니다. 코인 출금은 되돌릴 수 없습니다. 주소, 네트워크, 수량의 최종 확인과 그 결과는 사용자의 책임이며, 가상자산 투자는 원금 손실 위험이 있습니다.

반복하는 출금 작업이 있으시다면

쓰시는 지갑과 거래소가 어디인지부터 알려 주세요.
되는 것과 안 되는 것을 먼저 확인해서 말씀드립니다.

무료 상담 시작하기 고객 후기 보기
← 제작 사례 전체 보기