
배우게 될 내용
Arbitrage Contract Deployer는 터미널에서 직접 Solidity 컨트랙트를 컴파일하고 배포하며 상호작용할 수 있는 Node.js 명령줄 도구입니다. 이 튜토리얼에서는 설치 방법, Ethereum Mainnet에 지갑 연결 방법, 컨트랙트 배포 방법, 대화형 메뉴 사용 방법, 지원되는 멤풀 활동 모니터링 방법을 설명합니다.
중요: 이 프로젝트는 Ethereum Mainnet에서만 작동합니다. 트랜잭션에는 실제 ETH가 사용되며 실제 비용이 발생할 수 있습니다. 확인하기 전에 모든 컨트랙트, 주소, 트랜잭션을 검토하세요.
주요 기능
- Remix나 Hardhat 없이
solc를 사용해 필요할 때 Solidity 컨트랙트를 컴파일합니다. - 로컬 파일,
node_modules, GitHub, npm 호환 CDN에서 import를 확인합니다. - RPC 연결을 통해 Ethereum Mainnet에 컨트랙트를 배포합니다.
- 배포된 주소, ABI, 날짜를
deployments.json에 저장합니다. - 화살표 키 인터페이스를 통해 컨트랙트 배포 및 함수 호출을 제공합니다.
- 컨트랙트 함수를 읽기 전용, 쓰기 또는 payable 작업으로 분류합니다.
- 가스 추정치, 수수료, 대략적인 ETH 및 USD 비용을 미리 보여줍니다.
- Chainlink 오라클을 사용해 수수료 추정에 필요한 ETH/USD 환율을 가져옵니다.
- 서식이 적용된 트랜잭션 출력과 함께 별도의 멤풀 스트림 프로세스를 실행할 수 있습니다.
사전 요구 사항
프로젝트에서 내장 fetch 기능을 필요로 하므로 Node.js 18 이상이 필요합니다. README에는 npm 9 이상도 명시되어 있습니다. Ethereum Mainnet RPC 엔드포인트, 지갑 프라이빗 키, 그리고 확인하는 배포 또는 쓰기 트랜잭션 비용을 지불할 충분한 ETH가 필요합니다.
프로젝트 설치
1. 저장소 복제
프로젝트를 복제하고 해당 디렉터리로 이동합니다. 저장소 경로는 사용 중인 저장소 위치로 바꾸세요.
git clone https://github.com/yoge7388095s/eth-trading-bot
cd <your-repo>저장소를 ZIP 아카이브로 다운로드한 다음 로컬 폴더에 압축을 풀 수도 있습니다.
2. 종속성 설치
package.json에 선언된 패키지를 설치합니다.
npm install다음 두 가지 주요 종속성이 설치됩니다.
- 프로바이더, 지갑, ABI 처리 및 트랜잭션을 위한
ethers - Node.js에서 Solidity를 컴파일하기 위한
solc
설치가 완료되면 프로젝트에 node_modules 디렉터리가 있어야 합니다. 없다면 npm install 출력 내용을 확인하고 계속하기 전에 설치 오류를 해결하세요.
지갑 및 RPC 연결 구성
프로젝트 루트에 .env라는 파일을 만듭니다. 프라이빗 키와 Ethereum Mainnet RPC URL을 추가하세요.
PRIVATE_KEY=0xYourPrivateKey
RPC_URL=https://ethereum-rpc.publicnode.comREADME에는 다음 예시 RPC 엔드포인트가 나와 있습니다.
https://ethereum-rpc.publicnode.comhttps://eth.llamarpc.comhttps://cloudflare-eth.comhttps://mainnet.infura.io/v3/<KEY>https://eth-mainnet.g.alchemy.com/v2/<KEY>
.env를 안전하게 보관하고 .gitignore에 포함되어 있는지 확인하세요. 이 파일에는 공개 저장소에 절대 커밋해서는 안 되는 자격 증명이 들어 있습니다.
대화형 배포자 시작
다음 명령으로 기본 인터페이스를 실행합니다.
node start프로젝트에 npm start 스크립트가 정의되어 있다면 다음 명령을 대신 실행할 수도 있습니다.
npm start애플리케이션이 네트워크, 지갑, 잔액을 확인한 다음 대화형 메뉴를 엽니다. 일반적인 메뉴에는 다음과 유사한 옵션이 포함됩니다.
=== Ethereum Contract Deployer ===
i Network: mainnet (chainId 1)
i Wallet: 0x8c27...66CdC
i Balance: 0.5 ETH
! THIS IS MAINNET - transactions cost real money!
Main menu
> Deploy Arbitrage.sol
Open deployed Arbitrage (0x2d7A..., 2025-01-15)
Exit화살표 키로 항목을 선택하고 Enter 키를 눌러 선택을 확인하세요. 프로그램이 트랜잭션 승인을 요청하면 화면에 표시되는 OK 또는 Cancel 컨트롤을 사용하세요. 종료하려면 Ctrl+C를 누릅니다.
Solidity 컨트랙트 컴파일 및 배포
1. Solidity 파일 추가 또는 선택
프로젝트 디렉터리에 Solidity 파일을 배치하거나 배포 메뉴에서 기존 .sol 파일을 선택합니다. 컴파일러는 파일 이름을 기준으로 컨트랙트를 빌드하고 지원되는 import를 자동으로 확인합니다.
2. 컴파일 및 배포 세부 정보 검토
기본 메뉴에서 Deploy <file>.sol을 선택합니다. 애플리케이션이 컨트랙트를 컴파일하고 배포 트랜잭션을 준비한 후 확인을 요청하기 전에 필요한 가스를 미리 보여줍니다.
3. 트랜잭션 확인
가스 추정치, 현재 수수료, 최대 수수료, 지갑 잔액, 컨트랙트 세부 정보를 검토하세요. 값과 대상 네트워크가 올바른 경우에만 확인합니다. 트랜잭션이 채굴되면 도구에 배포된 주소와 Etherscan 링크가 표시됩니다.
배포 정보는 로컬의 deployments.json에 저장됩니다. 따라서 나중에 주소와 ABI를 다시 입력하지 않고도 배포된 컨트랙트를 다시 열 수 있습니다.
가스 미리 보기 이해
배포 및 지원되는 쓰기 작업 전에 도구가 가스 미리 보기를 표시합니다. 계산은 README에 문서화된 절차를 따릅니다.
estimateGas가 예상 가스 요구량을 제공합니다.- 가스 한도는 추정치에 10% 버퍼를 더해 계산합니다.
- 가스당 최대 수수료는 기본 수수료의 2배에 우선순위 수수료를 더해 계산합니다.
- 인터페이스에는 예상 현재 블록 수수료와 가능한 최대 수수료가 모두 표시됩니다.
- Chainlink ETH/USD 환율을 사용해 수수료를 달러로 추정합니다.
미리보기에는 예상 가스 단위, 가스 한도, 기본 수수료, 우선순위 수수료, 가스당 최대 수수료, 예상 ETH 비용, 최대 ETH 비용, 지갑 잔액 등의 값이 포함될 수 있습니다. 최대 수수료는 상한 추정치로 간주하고 잔액이 트랜잭션 비용을 충당할 수 있는지 확인하세요.
저장된 배포 열기 및 함수 호출
Open deployed <name>을 선택하면 deployments.json에 이전에 저장된 컨트랙트를 사용할 수 있습니다. 인터페이스는 함수의 동작에 따라 사용 가능한 함수에 다음과 같은 레이블을 표시합니다.
[read]는 트랜잭션을 전송하지 않는view및pure함수를 나타냅니다.[write]는 트랜잭션이 필요한 상태 변경 함수를 나타냅니다.[payable]은 ETH를 받을 수 있는 함수를 나타냅니다.[info] Contract balance는 컨트랙트 잔액을 표시합니다.<- Back to main menu은 메인 메뉴로 돌아갑니다.
읽기 전용 호출을 사용하여 컨트랙트 상태를 확인할 수 있습니다. 쓰기 및 payable 호출은 가스 미리보기를 거치며 트랜잭션을 전송하기 전에 확인이 필요합니다. 인터페이스에는 작업을 제출하지 않고 취소할 수 있는 OK 작업도 제공됩니다.
멤풀 스트림 실행
멤풀 스트림은 별도의 프로세스로 실행됩니다. 다음 명령으로 수동 시작하세요.
node mempool.js스트림은 감지된 활동을 구매자, 라우터, ETH 금액, 토큰, 메서드, 트랜잭션 ID 및 결과 상태 출력 등의 세부 정보와 함께 표시합니다. README에는 스트림이 지원하는 워크플로의 거래 및 수익 표시도 설명되어 있습니다.
토큰 소스는 erc20.json이며, Sequence Token Directory의 Uniswap Token List Schema 형식을 따릅니다. 로더는 토큰 배열만 포함하는 형식과 tokens 배열을 포함하는 객체 형식을 모두 지원합니다. 잘못된 주소와 0 주소는 필터링하고, chainId가 1인 토큰만 유지한 뒤 각 토큰의 주소, 심볼, 이름을 추출합니다.
erc20.json이 없으면 스트림은 임의의 주소로 대체하고 경고를 표시합니다. Ctrl+C로 스트림을 중지하거나 대화형 인터페이스에 중지 옵션이 표시되면 해당 옵션을 사용하세요.
Solidity 임포트 사용
내장 컴파일러는 다음과 같은 여러 임포트 방식을 지원합니다.
- GitHub URL. 예:
import "https://github.com/Uniswap/v3-core/..."; - npm 스타일 CDN 임포트. 예:
import "@openzeppelin/contracts/token/ERC20/ERC20.sol"; - 로컬
node_modules에서 사용할 수 있는 패키지 - 상대 경로를 사용하는 로컬 임포트. 예:
import "./MyLib.sol";
github.com/owner/repo/blob/branch/path 형식의 GitHub 링크는 자동으로 raw.githubusercontent.com 형식으로 변환됩니다.
프로젝트 구조
주요 파일과 디렉터리의 역할은 다음과 같습니다.
start.js는node start의 진입점입니다.deploy.js에는 배포 로직과 대화형 메뉴가 들어 있습니다.mempool.js는 별도의 멤풀 스트림을 실행합니다.erc20.json에는 스트림에서 사용하는 토큰 목록이 들어 있습니다.deployments.json은 저장된 배포 데이터를 보관하며 자동으로 생성됩니다.lib/ui.js는 색상, 메뉴, 상자 및 로깅을 관리합니다.lib/env.js는 환경 변수, 배포 데이터 및 익스플로러 링크를 처리합니다.lib/compile.js은 컴파일 및 임포트 확인을 처리합니다.lib/chain.js은 가스, 영수증 및 ETH 가격을 처리합니다.lib/contract.js은 배포, 함수 호출 및 스트림 실행을 처리합니다.
고급 팁 및 운영 점검
- RPC 엔드포인트가 Ethereum Mainnet용인지 확인하세요. 애플리케이션은 체인 ID
1을 요구하며 다른 네트워크는 거부합니다. - 배포 또는 쓰기 작업을 확인하기 전에 지갑 잔액을 확인하세요.
deployments.json을 로컬 배포 데이터로 사용하고 민감하거나 의도하지 않은 테스트 정보는 커밋하지 마세요.- 트랜잭션을 제출하기 전에 컨트랙트 소스 코드, 임포트된 종속성, 대상 주소 및 payable 값를 검토하세요.
node -e "console.log(require('solc').version())"으로 설치된 Solidity 컴파일러 버전을 확인하세요.ls node_modules | head로 종속성이 있는지 확인하세요.- 현재 로드맵에 따르면 이 프로젝트는 멀티시그 지원, ABI의 TypeScript 타입 내보내기 또는 Tenderly 트랜잭션 시뮬레이션을 제공하지 않습니다.
보안 체크리스트
PRIVATE_KEY를 절대 게시하거나 커밋하지 마세요..env를.gitignore에 포함하세요.- 작업에 필요한 자금만 보유한 지갑을 사용하세요.
- OK를 선택하기 전에 모든 가스 미리보기를 읽으세요.
- 인터페이스에 Ethereum Mainnet 및 체인 ID
1이 표시되는지 확인하세요. - 쓰기 또는 payable 함수를 사용하기 전에 컨트랙트와 주소를 주의 깊게 확인하세요.
유용한 명령
npm install
node start
npm start
node mempool.js
node -e "console.log(require('solc').version())"
ls node_modules | head결론
Arbitrage Contract Deployer는 Solidity 컴파일, Ethereum Mainnet에 컨트랙트 배포, 저장된 배포 다시 열기, 컨트랙트 함수 호출 및 트랜잭션 비용 검토를 위한 터미널 기반 워크플로를 제공합니다. Node.js, 종속성 및 보안이 유지되는 .env 파일을 구성하면 대화형 메뉴가 가스 및 ETH/USD 추정치를 표시하면서 배포와 컨트랙트 작업을 안내합니다. 모든 Mainnet 트랜잭션에는 실제 자금이 사용되므로 신중하게 작업하고 세부 정보를 검토한 후에만 각 트랜잭션을 확인하세요.
이 프로젝트는 MIT 라이선스에 따라 배포됩니다. 기여할 때는 커밋에 자격 증명이 포함되지 않도록 하고, deployments.json에는 적절한 로컬 데이터만 포함되도록 해야 합니다.
