Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

sanshao/etherum-virtual-net

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

AltStyle によって変換されたページ (->オリジナル) /