Solidity, Foundry, Next.js, wagmi를 총동원하여 개발한 실시간 이더리움 가격 예측 게임입니다. Pyth Network 오라클을 통해 실시간 데이터를 가져오며, 자동 정산 봇을 통해 사용자 편의성을 극대화했습니다.
사용자가 특정 시간(1, 4, 24시간) 뒤의 이더리움 가격이 현재보다 높을지(UP) 낮을지(DOWN) 예측하여 ETH를 베팅하는 서비스입니다. 예측 성공 시 베팅금의 2배를 보상으로 받습니다.
- 배포 네트워크: Sepolia Testnet
- 실시간 가격 데이터: Pyth Network Oracle
- 실시간 시세 확인: Pyth Network를 연동하여 2초마다 갱신되는 이더리움 가격 UI 제공.
- 예측 베팅: 사용자가 상승(UP) 또는 하락(DOWN)에 ETH를 베팅 (최소 0.01 ~ 최대 0.1 ETH).
- 자동 정산 시스템 (Bot): EC2 서버에서 구동되는 봇이 베팅 만료 시간을 감시하고 자동으로 결과를 정산.
- 투명한 결과 확인: 스마트 컨트랙트에 저장된
startPrice와endPrice를 비교하여 승패를 투명하게 공개. - 히스토리 관리: 사용자의 과거 베팅 내역, 시작/종료 시간, 결과 및 수익률 확인 가능.
- Smart Contract: Solidity 0.8.26, Pyth SDK (Oracle 연동)
- Frontend: Next.js, wagmi, RainbowKit, Viem
- Backend (Bot): Node.js, ethers.js v6, PM2 (EC2 배포)
- Tools: Foundry (Test), Vercel (Deployment)
이 프로젝트는 Foundry(스마트 컨트랙트)와 Next.js(프론트엔드), 그리고 Node.js(자동 정산 봇)로 구성되어 있습니다.
- Node.js: v18.x 이상
- Foundry: 설치 가이드 참조
- 지갑: MetaMask (Sepolia 네트워크 설정 및 테스트용 ETH 필요)
- 오라클: Pyth Network (Sepolia Price Feed ID 활용)
이 프로젝트는 Foundry(스마트 컨트랙트)와 Next.js(프론트엔드), 그리고 Node.js(자동 정산 봇)로 구성된 모노레포 구조입니다. 프로젝트 폴더 루트 경로에서 아래 과정을 진행합니다.
- Node.js: v18.x 이상
- Foundry: 설치 가이드 참조
- 지갑: MetaMask (Sepolia 네트워크 설정 및 테스트용 ETH 필요)
# 스마트 컨트랙트
# 의존성 라이브러리 설치 (Pyth SDK 등)
forge install
# 컨트랙트 컴파일
forge build
# 단위 테스트 실행 (핵심 로직 테스트)
forge test -vv
# 단위 테스트 실행 (핵심 로직 테스트)
forge script script/DeployETHPrediction.s.sol --rpc-url $SEPOLIA_RPC_URL --private-key $PRIVATE_KEY --broadcast
# 이하부터 컨트랙트 주소를 env에 추가
# 프론트엔드
# 의존성 설치 (버전 충돌 방지를 위해 legacy-peer-deps 옵션 사용)
npm install --legacy-peer-deps
# 로컬 개발 서버 실행
npm run dev
# 백엔드 : 봇이 위치한 폴더로 이동 (예: 루트 경로의 backend 폴더)
# 필수 패키지 설치
npm install dotenv ethers @pythnetwork/pyth-common-js
# 봇 실행 (PM2를 이용한 무중단 운영)
pm2 start bot.js --name "eth-prediction-bot"[배포 URL] (https://bay-eth-prediction.vercel.app/)
가급적 TRUST WALLET으로 연결하시는것을 추천합니다