名称: defi-registry-manager
描述: 管理代码库中代币、流动性池、链、网络和去中心化交易所的扩展。在添加新代币、协议、链、网络或更新现有DeFi注册表数据时使用。触发词:添加代币、新代币、添加协议、新DEX、添加链、新网络、添加RPC、更新地址。
DeFi 注册表管理器
管理代码库中代币、流动性池、链、网络和去中心化交易所的扩展。
何时使用
- 向注册表添加新代币
- 添加新协议或去中心化交易所
- 添加对新链的支持
- 配置网络RPC端点
- 更新代币地址或小数位数
工作流程
步骤 1:识别注册表类型
确定是添加代币、协议、链还是网络。
步骤 2:遵循检查清单
根据注册表类型使用相应的检查清单。
步骤 3:更新所有文件
确保同时更新所有必需的文件。
步骤 4:验证更改
运行验证命令以确保一致性。
触发短语
- “添加代币”、“新代币”、“添加币种”
- “添加协议”、“新DEX”、“添加交易所”
- “添加链”、“新网络”、“支持链”
- “添加网络”、“新RPC”、“配置网络”
- “更新地址”、“修复代币地址”
注册表位置
代币 - 必须同时更新所有文件:
| 文件 |
用途 |
格式 |
client/src/constants/protocols.ts |
前端代币列表 |
TOKENS[chainId] 数组 |
rust-core/crates/core/src/tokens.rs |
Rust核心代币 |
TOKENS LazyLock HashMap |
server/src/services/wallet.ts |
钱包服务代币 |
COMMON_TOKENS + TOKEN_SYMBOLS |
shared/schema.ts |
共享小数位数映射 |
TOKEN_DECIMALS 记录 |
协议/DEX:
| 文件 |
用途 |
client/src/constants/protocols.ts |
PROTOCOLS 数组 |
server/src/services/arbitrage.ts |
用于扫描的 DEXES 数组 |
server/src/services/price-oracle.ts |
价格预言机适配器 |
链:
| 文件 |
用途 |
client/src/constants/protocols.ts |
CHAINS 数组 + ChainId 类型 |
rust-core/crates/core/src/lib.rs |
ChainId 枚举 |
server/src/config/env.ts |
每条链的RPC URL |
shared/schema.ts |
ChainId 类型 |
server/src/db/schema.ts |
adminChains 表(管理界面) |
网络(RPC/基础设施):
| 文件 |
用途 |
server/src/config/env.ts |
主RPC URL、WebSocket端点 |
server/src/db/schema.ts |
adminChains 表,包含 rpcUrl、explorerUrl |
rust-core/crates/core/src/lib.rs |
网络常量、出块时间 |
server/src/services/trade-executor.ts |
链特定Gas设置 |
管理界面数据库表:
| 表 |
用途 |
adminTokens |
通过管理界面的动态代币注册表 |
adminProtocols |
通过管理界面的动态协议/DEX注册表 |
adminChains |
通过管理界面的动态链/网络配置 |
strategies |
交易策略配置 |
添加新代币 - 检查清单
[ ] 1. 在区块浏览器上验证代币地址(校验和格式)
[ ] 2. 确认小数位数(关键:USDC/USDT=6,WBTC=8,大多数=18)
[ ] 3. 更新 client/src/constants/protocols.ts - TOKENS[chainId]
[ ] 4. 更新 rust-core/crates/core/src/tokens.rs - chain_tokens.insert()
[ ] 5. 更新 server/src/services/wallet.ts - COMMON_TOKENS[chainId]
[ ] 6. 更新 server/src/services/wallet.ts - TOKEN_SYMBOLS(小写)
[ ] 7. 更新 shared/schema.ts - TOKEN_DECIMALS(如果不是标准的18位)
[ ] 8. 运行:grep -r "TOKEN_ADDRESS_HERE" 查找任何硬编码引用
代币模板
// 前端 (protocols.ts)
{
address: '0x...', // 校验和地址
symbol: 'TOKEN',
name: '代币名称',
decimals: 18,
chains: ['ethereum'],
}
// Rust (tokens.rs)
tokens.insert("TOKEN", Token::new(
"0x...".parse().unwrap(),
"TOKEN", "代币名称", 18, ChainId::Ethereum
));
// 钱包服务 (wallet.ts) - COMMON_TOKENS
'0x...', // TOKEN
// 钱包服务 (wallet.ts) - TOKEN_SYMBOLS
'0x...lowercase': 'TOKEN',
添加新协议/DEX - 检查清单
[ ] 1. 添加到 client/src/constants/protocols.ts - PROTOCOLS 数组
[ ] 2. 将路由器地址添加到 shared/schema.ts - PROTOCOL_ADDRESSES
[ ] 3. 添加到 server/src/services/arbitrage.ts - DEXES(如果可扫描)
[ ] 4. 在 server/src/services/price-oracle.ts 中创建适配器(如果需要)
[ ] 5. 如果协议需要特定验证,则更新 validation.ts
添加新链 - 检查清单
[ ] 1. 将 ChainId 添加到 shared/schema.ts
[ ] 2. 将 ChainId 枚举变体添加到 rust-core/crates/core/src/lib.rs
[ ] 3. 添加到 client/src/constants/protocols.ts - CHAINS 数组
[ ] 4. 将 RPC URL 添加到 server/src/config/env.ts
[ ] 5. 将链配置添加到 server/src/services/trade-executor.ts
[ ] 6. 在所有代币文件中为新链添加代币
[ ] 7. 为新链添加协议地址
[ ] 8. (可选)通过管理界面添加到 adminChains 以进行动态配置
添加/配置网络 - 检查清单
[ ] 1. 获取可靠的RPC端点(Alchemy、Infura、QuickNode或自托管)
[ ] 2. 将环境变量添加到 server/src/config/env.ts
- HTTP RPC: {CHAIN}_RPC_URL
- WebSocket: {CHAIN}_WS_URL(如果需要订阅)
[ ] 3. 配置速率限制和备用RPC(如果可用)
[ ] 4. 将网络参数添加到 rust-core/crates/core/src/lib.rs:
- 出块时间(用于时间估计)
- Gas代币小数位数
- EIP-1559 支持标志
[ ] 5. 在 server/src/services/trade-executor.ts 中配置Gas设置:
- 基础费用乘数
- 默认优先费用
- Gas限制覆盖
[ ] 6. 添加交易链接的浏览器URL
[ ] 7. 测试连接性:curl -X POST {RPC_URL} -d '{"jsonrpc":"2.0","method":"eth_blockNumber","params":[],"id":1}'
[ ] 8. 通过 /admin -> Chains 标签页添加到管理界面以进行动态更新
网络配置模板
// 环境 (.env)
ETHEREUM_RPC_URL=https://eth-mainnet.g.alchemy.com/v2/YOUR_KEY
ETHEREUM_WS_URL=wss://eth-mainnet.g.alchemy.com/v2/YOUR_KEY
ARBITRUM_RPC_URL=https://arb-mainnet.g.alchemy.com/v2/YOUR_KEY
// server/src/config/env.ts
ethereum: {
rpcUrl: process.env.ETHEREUM_RPC_URL,
wsUrl: process.env.ETHEREUM_WS_URL,
chainId: 1,
blockTime: 12, // 秒
supportsEip1559: true,
}
// 管理界面 (adminChains 表)
{
id: 'ethereum',
name: '以太坊主网',
chainIdNumeric: 1,
rpcUrl: 'https://...',
explorerUrl: 'https://etherscan.io',
nativeToken: 'ETH',
enabled: true,
}
常见代币地址(以太坊主网)
| 代币 |
地址 |
小数位数 |
| WETH |
0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2 |
18 |
| USDC |
0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48 |
6 |
| USDT |
0xdAC17F958D2ee523a2206206994597C13D831ec7 |
6 |
| DAI |
0x6B175474E89094C44Da98b954EedeAC495271d0F |
18 |
| WBTC |
0x2260FAC5E5542a773Aa44fBCfeDf7C193bc2C599 |
8 |
验证命令
进行更改后,运行以下命令以验证一致性:
# 检查某个链的所有文件是否具有相同的代币数量
grep -c "ethereum" client/src/constants/protocols.ts
grep -c "Ethereum" rust-core/crates/core/src/tokens.rs
# 验证地址一致性
grep -ri "0xA0b86991" --include="*.ts" --include="*.rs"
# 检查地址中的拼写错误
grep -ri "0x6B175474E89094C44Da98b954" --include="*.ts" --include="*.rs"
常见网络
| 网络 |
链 ID |
出块时间 |
原生代币 |
EIP-1559 |
| 以太坊 |
1 |
12秒 |
ETH |
是 |
| Arbitrum One |
42161 |
0.25秒 |
ETH |
是 |
| Base |
8453 |
2秒 |
ETH |
是 |
| Polygon |
137 |
2秒 |
MATIC |
是 |
| Optimism |
10 |
2秒 |
ETH |
是 |
| Avalanche |
43114 |
2秒 |
AVAX |
是 |
| BSC |
56 |
3秒 |
BNB |
否 |
关键规则
- 始终验证小数位数 - 错误的小数位数会导致灾难性错误
- 使用校验和地址 - 混合大小写以符合EIP-55标准
- 更新所有文件 - 部分更新会导致运行时错误
- 更改后进行测试 - 运行客户端和Rust核心的构建
- TOKEN_SYMBOLS中使用小写 - 键必须是地址的小写形式
- 测试RPC连接性 - 部署前验证端点
- 使用备用RPC - 主RPC + 备用RPC以提高可靠性
- 监控速率限制 - 保持在提供商配额内