Skip to content

sanshao/etherum-virtual-net

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

1 Commit
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

🔷 Ethereum Virtual Net

一个模拟以太坊主网 RPC 接口的服务,用于开发和测试。可以将主流钱包(如 MetaMask)的 RPC 节点配置为该服务,模拟以太坊网络的功能。

✨ 功能特性

  • 🔗 完整的以太坊 JSON-RPC 接口支持
  • 💰 预置测试账户,每个账户有 100 ETH
  • ⛏️ 自动挖矿功能
  • 📦 使用 SQLite + Prisma 持久化数据
  • 🔧 兼容 Hardhat/Ganache 调试方法
  • 🦊 支持 MetaMask 等主流钱包连接

📋 支持的 RPC 方法

Web3 方法

  • web3_clientVersion - 获取客户端版本
  • web3_sha3 - 计算 Keccak-256 哈希

Net 方法

  • net_version - 获取网络 ID
  • net_listening - 是否正在监听
  • net_peerCount - 连接节点数

Eth 方法

  • eth_chainId - 获取链 ID
  • eth_blockNumber - 获取当前区块号
  • eth_getBalance - 获取账户余额
  • eth_getTransactionCount - 获取账户 nonce
  • eth_getCode - 获取合约代码
  • eth_getStorageAt - 获取存储数据
  • eth_gasPrice - 获取 Gas 价格
  • eth_estimateGas - 估算 Gas
  • eth_sendTransaction - 发送交易
  • eth_sendRawTransaction - 发送原始交易
  • eth_call - 调用合约(不修改状态)
  • eth_getBlockByNumber - 根据区块号获取区块
  • eth_getBlockByHash - 根据哈希获取区块
  • eth_getTransactionByHash - 获取交易详情
  • eth_getTransactionReceipt - 获取交易收据
  • eth_getLogs - 获取事件日志
  • eth_feeHistory - 获取费用历史
  • eth_maxPriorityFeePerGas - 获取最大优先费用
  • 更多方法...

调试方法

  • evm_mine - 手动挖矿
  • evm_increaseTime - 增加时间
  • hardhat_setBalance - 设置账户余额
  • hardhat_setCode - 设置合约代码
  • hardhat_impersonateAccount - 模拟账户

🚀 快速开始

1. 安装依赖

npm install

2. 配置环境变量

复制 .env.example.env 并按需修改:

cp .env.example .env

环境变量说明:

# 服务器配置
PORT=8545                    # RPC 端口
HOST=0.0.0.0                 # 监听地址

# 数据库配置
DATABASE_URL="file:./dev.db" # SQLite 数据库路径

# 以太坊网络配置
CHAIN_ID=1337                # 链 ID
NETWORK_NAME="Ethereum Virtual Net"
BLOCK_TIME=12000             # 区块时间(毫秒)

# 初始账户私钥(逗号分隔)
INITIAL_ACCOUNTS="0xac0974bec39a17e36ba4a6b4d238ff944bacb478cbed5efcae784d7bf4f2ff80,..."

# 初始余额(wei)
INITIAL_BALANCE="100000000000000000000"  # 100 ETH

3. 初始化数据库

npm run prisma:generate
npm run prisma:migrate

4. 启动服务

开发模式:

npm run dev

生产模式:

npm run build
npm start

🦊 钱包配置

启动服务后,在 MetaMask 或其他钱包中添加自定义网络:

设置项
网络名称 Ethereum Virtual Net
RPC URL http://localhost:8545
链 ID 1337
货币符号 ETH

👛 测试账户

服务启动时会自动创建以下测试账户,每个账户初始余额为 100 ETH:

# 地址 私钥
0 0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266 0xac0974bec39a17e36ba4a6b4d238ff944bacb478cbed5efcae784d7bf4f2ff80
1 0x70997970C51812dc3A010C7d01b50e0d17dc79C8 0x59c6995e998f97a5a0044966f0945389dc9e86dae88c7a8412f4603b6b78690d
2 0x3C44CdDdB6a900fa2b585dd299e03d12FA4293BC 0x5de4111afa1a4b94908f83103eb1f1706367c2e68ca870fc3fb9a804cdab365a
3 0x90F79bf6EB2c4f870365E785982E1f101E93b906 0x7c852118294e51e653712a81e05800f419141751be58f605c371e15141b007a6
4 0x15d34AAf54267DB7D7c367839AAf71A00a2C6A65 0x47e179ec197488593b187f80a00eb0da91f1b9d0b13f8733639f19c30a34926a

⚠️ 警告:这些是公开的测试账户私钥,仅用于本地开发测试,切勿在生产环境或主网使用!

📁 项目结构

etherum-virtual-net/
├── prisma/
│   └── schema.prisma       # 数据库模型
├── src/
│   ├── config/
│   │   └── index.ts        # 配置文件
│   ├── rpc/
│   │   └── handlers.ts     # RPC 方法处理器
│   ├── services/
│   │   ├── database.ts     # 数据库连接
│   │   ├── accountService.ts   # 账户服务
│   │   ├── blockService.ts     # 区块服务
│   │   ├── transactionService.ts # 交易服务
│   │   └── logService.ts       # 日志服务
│   ├── types/
│   │   └── index.ts        # 类型定义
│   ├── utils/
│   │   └── helpers.ts      # 工具函数
│   ├── app.ts              # Express 应用
│   └── index.ts            # 入口文件
├── package.json
├── tsconfig.json
└── README.md

🛠️ 开发命令

# 安装依赖
npm install

# 开发模式运行
npm run dev

# 构建
npm run build

# 生产模式运行
npm start

# 生成 Prisma 客户端
npm run prisma:generate

# 执行数据库迁移
npm run prisma:migrate

# 打开 Prisma Studio(数据库管理界面)
npm run prisma:studio

📝 API 示例

获取链 ID

curl -X POST http://localhost:8545 \
  -H "Content-Type: application/json" \
  -d '{"jsonrpc":"2.0","method":"eth_chainId","params":[],"id":1}'

响应:

{"jsonrpc":"2.0","id":1,"result":"0x539"}

获取账户余额

curl -X POST http://localhost:8545 \
  -H "Content-Type: application/json" \
  -d '{"jsonrpc":"2.0","method":"eth_getBalance","params":["0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266","latest"],"id":1}'

发送交易

curl -X POST http://localhost:8545 \
  -H "Content-Type: application/json" \
  -d '{
    "jsonrpc":"2.0",
    "method":"eth_sendTransaction",
    "params":[{
      "from":"0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266",
      "to":"0x70997970C51812dc3A010C7d01b50e0d17dc79C8",
      "value":"0xDE0B6B3A7640000"
    }],
    "id":1
  }'

手动挖矿

curl -X POST http://localhost:8545 \
  -H "Content-Type: application/json" \
  -d '{"jsonrpc":"2.0","method":"evm_mine","params":[],"id":1}'

📄 License

MIT

About

No description, website, or topics provided.

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors