ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

如何用 Anvil 分叉以太坊主网测试 MetaMask Extension 与 dApp?

如何用 Anvil 分叉以太坊主网测试 MetaMask Extension 与 dApp? 如何用 Anvil 分叉以太坊主网测试 MetaMask Extension 与 dApp【免费下载链接】metamask-extension:globe_with_meridians: :electric_plug: The MetaMask browser extension enables browsing Ethereum blockchain enabled websites项目地址: https://gitcode.com/GitHub_Trending/me/metamask-extension在开发 MetaMask Extension 时常常需要验证依赖主网状态的功能——例如某个 dApp 读取链上合约数据、或扩展的主网交互流程——但又不想真的在主网上发起交易。MetaMask 仓库文档给出了一条现成路径用 Foundry 的 Anvil 分叉主网forking feature把本地 Anvil 网络及其生成的账户导入 MetaMask让扩展和 dApp 像在真实主网上一样工作而交易只发生在本地。docs/forking-mainnet-for-testing.md完成这篇文档中的步骤后你的本地开发构建版 MetaMask 会连上一个 Chain ID 为 1 的本地分叉链每个生成的账户都预置了大量 ETH 余额可以直接用于本地测试。准备条件按 README 的要求先完成本地开发构建在项目根目录运行yarn install安装依赖。创建一个.metamaskrc文件其中INFURA_PROJECT_ID需要填你自己的 Infura 项目 ID文档说明如果没有 Infura 账号可以免费注册一个。注意 fork 主网时 Anvil 会直接向 Infura 请求主网区块数据占位 ID 无法完成分叉。构建并运行开发构建yarn startyarn start适用于 Chromium 系浏览器Firefox 用yarn start:mv2。构建产物在./dist/随后按 How to add custom build to Chrome或 Firefox把本地构建加载进浏览器并打开 MetaMask 插件。确认 Foundry 的anvil二进制可用。项目把anvil脚本定义为node_modules/.bin/anvil见 package.json文档建议如果尚未安装先运行yarn foundryup用 Anvil 分叉主网在浏览器中保持 MetaMask 打开然后在另一个终端运行yarn anvil --fork-url https://mainnet.infura.io/v3/INFURA_PROJECT_ID --chain-id 1命令中只有一个必须替换的变量INFURA_PROJECT_ID换成你自己的 Infura 项目 ID与.metamaskrc中的一致即可。--chain-id 1保证本地分叉链的 Chain ID 与主网相同这样按主网配置写入的合约地址、链上数据在分叉上都能被正确解析。Anvil 启动后会在终端输出一组内容一批账户地址与对应的私钥private keys一句助记词即 Mnemonic也就是 SRPSecret Recovery Phrase。这些信息是后续导入 MetaMask 的唯一凭据注意它们只在 Anvil 启动时打印一次。把 Anvil 账户与网络导入 MetaMask文档给出两条互斥的导入路径任选其一即可在 MetaMask 中导入 Anvil 输出的私钥适合只测单个账户或在 MetaMask 中导入 Anvil 输出的SRP助记词适合使用整套生成的账户。导入账户后把 Anvil 作为自定义网络加入 MetaMask三个字段按文档固定填写字段值New RPC URLhttp://127.0.0.1:8545Chain Id1Currency symbolETH切换到这个网络后就可以像使用主网一样操作 MetaMask 和大多数 dApp。验证分叉是否可用文档给出的成功判据是每个 Anvil 生成的账户带有大量预置 ETH 余额可以直接在本地分叉上消费。切到该网络后在 MetaMask 中确认账户余额非零即可。可以正常操作 dApp 发起交易且交易只落在本地分叉上。仓库自带了配套的本地测试 dApp可与上面的流程组合使用yarn dapp该脚本用静态服务器把metamask/test-dapp跑在:8080端口见 package.json在浏览器打开后即可与已导入 Anvil 网络的 MetaMask 交互。如果需要 Anvil 与 dApp 一起启动项目还提供了yarn dapp-chain它会同时运行yarn anvil --block-time 2和yarn dapp——注意这个脚本里的 Anvil 是固定--block-time 2且没有--fork-url跑的是本地空链而非主网分叉仅适用于不需要主网状态的 dApp 调试。QA 指南中还提到一个与主网分叉场景相关的用法把 MetaMask 网络从 mainnet 逐步切换到 localhostAnvil来验证网络切换流程并可以用anvil --block-time seconds设置自定义出块时间来模拟 MetaMask 的 retryTx 行为。这属于可选分支仅在需要验证重试逻辑时加到 Anvil 启动参数上。已知限制文档明确提示了一个时间边界分叉是某个主网快照的本地拷贝。距离运行步骤 2启动yarn anvil --fork-url ...经过较长时间后与许多 dApp 和智能合约的交互开始出现行为不一致或失败——因为本地分叉的区块数据与真实主网已经脱节。遇到这类问题时重新启动一次分叉命令即可同时记得在 MetaMask 中沿用同一网络配置。另外导入的私钥与助记词只属于本地分叉的测试身份余额也只存在于本地 Anvil 进程中Anvil 停止后分叉上的余额与交易状态不会保留到真实主网。【免费下载链接】metamask-extension:globe_with_meridians: :electric_plug: The MetaMask browser extension enables browsing Ethereum blockchain enabled websites项目地址: https://gitcode.com/GitHub_Trending/me/metamask-extension创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表