在 Base 上集成 GENY。
面向需要读取 GENY balance、准备 transfer、验证网络并引导用户完成 wallet onboarding 的应用。
生产常量
| 网络 | Base Mainnet |
|---|---|
| Chain ID | 8453 · 0x2105 |
| Native gas token | ETH |
| Token symbol | GENY |
| 小数位 | 18 |
| 合约 | 0x2a3d6f8c1fc4AcDcf3A75d19b445bae02F03676B |
读取余额
GENY 使用标准 ERC-20 balance surface。始终将请求绑定到 Base Mainnet,并按 18 位 decimals 格式化返回的整数。
import { JsonRpcProvider, Contract, formatUnits } from "ethers";
const provider = new JsonRpcProvider("https://mainnet.base.org");
const token = new Contract(
"0x2a3d6f8c1fc4AcDcf3A75d19b445bae02F03676B",
["function balanceOf(address) view returns (uint256)"],
provider
);
const raw = await token.balanceOf(userAddress);
const balance = formatUnits(raw, 18);准备 transfer
transfer 是由钱包授权的 ERC-20 transaction。不要请求或处理用户的 recovery phrase 或 private key。
import { BrowserProvider, Contract, parseUnits } from "ethers";
const provider = new BrowserProvider(window.ethereum);
const signer = await provider.getSigner();
const token = new Contract(
"0x2a3d6f8c1fc4AcDcf3A75d19b445bae02F03676B",
["function transfer(address,uint256) returns (bool)"],
signer
);
const tx = await token.transfer(recipient, parseUnits("12.5", 18));
await tx.wait();网络检查
启用写操作前,请确认已连接的 chain 是 Base Mainnet(8453),并向用户显示完整的目标地址。
Wallet onboarding
01
检测 injected 或 EIP-6963 wallet
优先使用用户已有的钱包与 provider 选择,不要静默替用户做决定。
02
请求 Base Mainnet
用途 wallet_switchEthereumChain with 0x2105. 仅在必要时回退到 wallet_addEthereumChain ,并且只在 wallet 报告 chain 未知时使用。
03
提供 token 导入
wallet_watchAsset 可以向兼容 wallet 建议 GENY,但通过 contract address 的手动路径应始终可用。
04
独立验证
将用户链接到 BaseScan,并在任何价值转移操作前鼓励其验证 contract address。
集成规则
- 将 contract address 视为 token 的主要标识;名称、符号与 logo 只是显示 metadata。
- 绝不要索取 seed phrase 或 private key。
- 签名前显示 active chain 与 destination。
- 当应用状态依赖确认时,等待 transaction receipt。
- 不要从缓存的 UI state 推断 balance;应从 chain 或可信 indexer 读取。