이더리움 기반 토큰 전송 및 지갑 관리를 위한 Node.js 백엔드 서버입니다.
TokenPass Wallet은 Web3.js를 활용하여 이더리움 네트워크와 상호작용하는 RESTful API 서버입니다. ERC20 토큰 전송, 멀티 센더 기능, 지갑 관리 등의 기능을 제공합니다.
- EVM 계정 생성
- 이더리움 잔고 조회
- ERC20 토큰 잔고 조회
- Nonce 관리
- 이더리움 전송 (
/transferEther) - ERC20 토큰 전송 (
/transferToken) - 멀티 센더 기능 (
/multisend) - 예치금 전송 (
/depositSend)
- 실시간 Gas Price 조회
- 이더 전송 수수료 계산
- 토큰 전송 수수료 계산
- ERC20 토큰 정보 조회 (name, symbol, decimal)
- 토큰 잔고 조회
- 다중 주소로 토큰 일괄 전송
- 사용자 Fee 관리
- Fee 환불 기능 (
/claimUserFees)
- Runtime: Node.js
- Framework: Express.js
- Blockchain: Web3.js (v1.2.6)
- Dependencies:
bignumber.js: 정밀한 숫자 계산ethereumjs-tx: 트랜잭션 서명body-parser: HTTP 요청 파싱node-fetch: HTTP 요청
# 저장소 클론
git clone https://github.com/moonlightpark/nodeServer.git
cd nodeServer
# 의존성 설치
npm install
# constants.js 파일 설정 (보안 정보 포함)
# constants.js 파일을 생성하고 필요한 설정값을 입력하세요constants.js 파일에 다음 정보를 설정해야 합니다:
- 네트워크 설정 (Mainnet, Sepolia 등)
- 컨트랙트 주소
- Private Key
- 접근 허용 IP 목록
- ABI 정보
constants.js 파일은 민감한 정보를 포함하므로 Git에 커밋되지 않습니다.
# 메인넷 서버 실행 (포트 3001)
node server.js
# 개발 서버 실행 (포트 3000)
node dev.js
# Sepolia 테스트넷 서버 실행 (포트 3002)
node doraemon01.jsGET /- 서버 상태 확인GET /ether/account- 새 EVM 계정 생성GET /ether/getbalance- 이더리움 잔고 조회GET /token/getbalance- 토큰 잔고 조회
GET /ether/version/network- 네트워크 정보 조회GET /ether/gas- 현재 Gas Price 조회
GET /senderNonce- Sender Owner의 Nonce 조회GET /getUserNonce- 특정 주소의 Nonce 조회
GET /token/info- ERC20 토큰 정보 조회
POST /ether/gasprice- 이더 전송 수수료 계산POST /token/gasprice- 토큰 전송 수수료 계산
POST /transferEther- 이더리움 전송POST /transferToken- ERC20 토큰 전송POST /multisend- 멀티 센더 (다중 전송)POST /depositSend- 예치금 전송GET /getTransction- 트랜잭션 조회GET /getTransactionReceipt- 트랜잭션 Receipt 조회
GET /getCurrentFee- 현재 전송 수수료 조회GET /getUserFeeData- 사용자 Fee 데이터 조회POST /claimUserFees- 사용자 Fee 환불
GET /senderAddress- Multi Sender 주소 조회GET /senderOwnerAddress- Sender Owner 주소 조회
nodeServer/
├── abis/ # 스마트 컨트랙트 ABI 파일
│ ├── ERC20ABI.json
│ ├── sender.json
│ └── sepolia/
├── classes/ # 클래스 모듈
│ ├── gasPriceStore.js # Gas Price 관리
│ └── txStore.js # 트랜잭션 처리
├── log/ # 로그 파일 디렉토리
├── common.js # 공통 함수 모듈
├── constants.js # 설정 상수 (Git 제외)
├── getWeb3.js # Web3 인스턴스 생성
├── getToken.js # 토큰 정보 로드
├── mysql-db.js # MySQL 연결 (선택사항)
├── server.js # 메인 서버 (포트 3001)
├── dev.js # 개발 서버 (포트 3000)
├── doraemon01.js # Sepolia 서버 (포트 3002)
└── package.json # 프로젝트 설정
- IP 기반 접근 제어 구현
- Private Key는
constants.js에 안전하게 보관 .gitignore를 통해 민감한 파일 제외- 트랜잭션 서명은 서버에서 처리
GET /ether/getbalance?address=0x1234...POST /transferToken
Content-Type: application/json
{
"from": "0x1234...",
"to": "0x5678...",
"token": "0xabcd...",
"balance": "1000000000000000000",
"n": 5
}POST /multisend
Content-Type: application/json
{
"txid_fee": "0x...",
"txid_token": "0x...",
"fromAddr": "0x1234...",
"tokenAddr": "0xabcd...",
"nonce": 10,
"index": 1,
"sendAddrs": [
{"addr": "0x5678...", "amount": 100},
{"addr": "0x9abc...", "amount": 200}
]
}- Ethereum Mainnet (포트 3001)
- Sepolia Testnet (포트 3002)
- 개발 환경 (포트 3000)
ISC
XXXXXXXXXXX
constants.js파일은 반드시 생성해야 하며, Private Key 등 민감한 정보를 포함합니다.- 프로덕션 환경에서는 반드시 HTTPS를 사용하세요.
- IP 접근 제어를 적절히 설정하세요.
- Gas Price는 네트워크 상황에 따라 변동되므로 주의하세요.
- 트랜잭션 전송 전 충분한 테스트를 수행하세요.