Thanks to visit codestin.com
Credit goes to github.com

Skip to content

dnr00/eth-bulk-operations

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

2 Commits
 
 
 
 
 
 
 
 
 
 

Repository files navigation

토큰 다중 전송 및 수집 도구

이 저장소는 이더리움 네이티브 토큰(ETH)과 ERC-20 토큰을 여러 계정에 효율적으로 전송하고, 다시 한 계정으로 수집하기 위한 스마트 컨트랙트와 스크립트를 제공합니다.

기능

  • 일괄 전송: 한 번의 트랜잭션으로 여러 주소에 이더나 토큰을 전송
  • 토큰 승인: 여러 계정에서 특정 주소에 ERC-20 토큰 사용 권한 부여
  • 토큰 수집: 여러 계정에서 하나의 주소로 토큰 모으기
  • 네이티브 토큰(예: ETH) 수집: 여러 계정에서 하나의 주소로 네이티브 토큰 모으기
  • 동기식/비동기식 처리: 일반 처리 또는 대규모 계정을 위한 고속 비동기 처리

폴더 구조

eth-bulk-operations/
├── contracts/           # 스마트 컨트랙트 파일
│   └── BatchTransfer.sol
├── script/              # Foundry 배포 스크립트
│   └── DeployBatchTransfer.s.sol
├── scripts/             # 파이썬 스크립트
│   ├── token/           # ERC-20 관련 스크립트
│   │   ├── approve_sync.py
│   │   ├── approve_async.py
│   │   ├── gather_sync.py
│   │   └── gather_async.py
│   ├── native/          # 네이티브 토큰 관련 스크립트
│   │   └── batch_send.py
│   └── utils/           # 공통 유틸리티
│       └── common.py
└── examples/            # 예제 파일
    ├── accounts_example.json
    └── .env.example

준비 사항

필수 도구

  1. Python 3.7+
  2. Foundry (컨트랙트 배포 시 필요)

Foundry 설치

macOS 사용자

curl -L https://foundry.paradigm.xyz | bash

설치 스크립트를 실행한 후, 다음 명령어를 실행하여 Foundry를 시스템에 로드합니다:

source ~/.bashrc  # bash 사용자
# 또는
source ~/.zshrc   # zsh 사용자

그런 다음 foundryup 명령어를 실행하여 Foundry 도구를 설치합니다:

foundryup

Linux 사용자

curl -L https://foundry.paradigm.xyz | bash

설치 스크립트를 실행한 후, 다음 명령어를 실행하여 Foundry를 시스템에 로드합니다:

source ~/.bashrc

그런 다음 foundryup 명령어를 실행하여 Foundry 도구를 설치합니다:

foundryup

Windows 사용자

Windows에서는 공식 설치 가이드를 참고하십시오.

간단히 요약하면:

  1. Git Bash 또는 WSL 설치
  2. Git Bash 또는 WSL 터미널에서 다음 명령어 실행:
curl -L https://foundry.paradigm.xyz | bash
  1. 그런 다음 foundryup 명령어를 실행하여 Foundry 도구를 설치합니다:
foundryup

설치 확인

설치가 성공적으로 완료되었는지 확인하려면 다음 명령어를 실행하세요:

forge --version
cast --version
foundryup --help

설치

  1. 저장소 복제:

    git clone https://github.com/yourusername/eth-bulk-operations.git
    cd eth-bulk-operations
  2. 파이썬 패키지 설치:

    pip install web3 python-dotenv
  3. 환경 설정:

    cp examples/.env.example .env
    # .env 파일을 편집하여 필요한 정보를 입력하세요

스마트 컨트랙트 사용법

BatchTransfer 컨트랙트

이 컨트랙트는 한 번의 트랜잭션으로 여러 주소에 ETH나 ERC-20 토큰을 전송할 수 있게 해줍니다.

주요 기능

  • batchTransfer: 여러 주소로 ETH 일괄 전송
  • batchTransferERC20: 여러 주소로 ERC-20 토큰 일괄 전송
  • depositERC20: ERC-20 토큰을 컨트랙트에 입금
  • withdrawERC20: ERC-20 토큰을 컨트랙트에서 인출
  • withdraw: 컨트랙트에서 ETH 인출

Foundry로 컨트랙트 배포하기

  1. Foundry 초기화(처음 사용시):

    forge init --no-commit
  2. 의존성 설치:

    forge install OpenZeppelin/openzeppelin-contracts
  3. 컨트랙트 배포:

    # 로컬 테스트넷
    forge script script/DeployBatchTransfer.s.sol --rpc-url http://localhost:8545 --private-key 0xac0974bec39a17e36ba4a6b4d238ff944bacb478cbed5efcae784d7bf4f2ff80 --broadcast
    
    # 실제 네트워크
    forge script script/DeployBatchTransfer.s.sol --rpc-url $RPC_URL --private-key $PRIVATE_KEY --broadcast --verify

파이썬 스크립트 사용법

네이티브 토큰(ETH) 일괄 전송

# scripts/native 디렉토리로 이동
cd scripts/native

# batch_send.py 실행
python batch_send.py

ERC-20 토큰 승인 (approve)

# scripts/token 디렉토리로 이동
cd scripts/token

# 동기식 처리 (소량의 계정인 경우)
python approve_sync.py

# 비동기식 처리 (대량의 계정인 경우)
python approve_async.py

ERC-20 토큰 일괄 전송

BatchTransfer 컨트랙트를 사용하여 여러 주소에 ERC-20 토큰을 한 번에 전송할 수 있습니다.

# scripts/native 디렉토리로 이동
cd scripts/native

# 컨트랙트의 batchTransferERC20 함수를 사용하기 위해 batch_send.py 실행
# 이 때 실행 전 스크립트 내부의 USE_ERC20 변수를 True로 설정하고
# TOKEN_CONTRACT_ADDRESS 변수를 사용할 토큰의 주소로 설정해야 합니다
python batch_send.py

참고: ERC-20 토큰을 사용하기 전에, 토큰 컨트랙트에서 BatchTransfer 컨트랙트에 대해 approve를 먼저 실행해야 합니다.

네이티브 토큰(ETH) 수집

# scripts/native 디렉토리로 이동
cd scripts/native

# 동기식 처리 (소량의 계정인 경우)
python gather_native_sync.py

# 비동기식 처리 (대량의 계정인 경우)
python gather_native_async.py

ERC-20 토큰 수집

# scripts/token 디렉토리로 이동
cd scripts/token

# 동기식 처리 (소량의 계정인 경우)
python gather_sync.py

# 비동기식 처리 (대량의 계정인 경우)
python gather_async.py

스크립트 세부 설정

각 스크립트는 실행하기 전에 다음과 같은 설정을 확인하고 필요에 맞게 수정해야 합니다:

공통 설정 (모든 스크립트)

  • .env 파일에 RPC_URL 및 CHAIN_ID 설정
  • ERC-20 토큰의 컨트랙트 주소 수정
  • 계정 정보가 담긴 JSON 파일 경로 지정

batch_send.py 설정

# 네이티브 토큰(ETH) 전송 설정
BATCH_SIZE = 100  # 한 번에 처리할 주소 개수
AMOUNT_PER_ADDRESS = 0.001  # 각 주소에 보낼 ETH 양
contract_address = '0x...'  # 배포한 BatchTransfer 컨트랙트 주소

# ERC-20 토큰 전송 설정
USE_ERC20 = False  # ERC-20 토큰 전송 시 True로 설정
TOKEN_CONTRACT_ADDRESS = '0x...'  # 전송할 ERC-20 토큰 컨트랙트 주소
TOKEN_AMOUNT_PER_ADDRESS = 10  # 각 주소에 보낼 토큰 양 (토큰 단위)

approve_sync.py / approve_async.py 설정

TOKEN_CONTRACT_ADDRESS = '0x...'  # ERC-20 토큰 컨트랙트 주소
SPENDER_ADDRESS = '0x...'  # approve 대상 주소 (일반적으로 BatchTransfer 주소)
APPROVE_AMOUNT = 150  # approve할 토큰 양 (ETH 단위)

gather_native_sync.py / gather_native_async.py 설정

RECIPIENT_ADDRESS = '0x...'  # ETH를 수집할 대상 주소
MIN_ETH_BALANCE = 0.001  # 전송을 위한 최소 ETH 잔액
RESERVE_GAS_ETH = 0.0005  # 가스비를 위해 남겨둘 ETH 금액
CONCURRENT_TASKS = 500  # 동시에 처리할 태스크 수 (비동기식 버전만)

gather_sync.py / gather_async.py 설정

TOKEN_CONTRACT_ADDRESS = '0x...'  # ERC-20 토큰 컨트랙트 주소
RECIPIENT_ADDRESS = '0x...'  # 토큰을 모을 대상 주소
MIN_TOKEN_BALANCE = 0.001  # 전송 최소 토큰 잔액 (ETH 단위)

계정 설정

계정 정보는 JSON 파일로 관리됩니다. 다음과 같은 형식으로 작성해야 합니다:

[
  {
    "address": "0x1234...",
    "private_key": "0xabcd..."
  },
  ...
]

주의: 개인키는 매우 민감한 정보이므로 보안에 주의하세요. 테스트용 계정만 사용하는 것을 권장합니다.

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published