在测试网部署一个自己的 iNFT 合约,并 mint 一个 iNFT。 提交 chain scan 上合约地址链接,以及 mint 的 inft 的链接
使用 hardhat 3,以及新特性 ignition,重新编写部署相关的代码
最大难点:Ignition buildModule 限制,涉及到合约变量的 log 打印以及条件逻辑都不能用。也不能用 async/await 异步操作。
会报错 inspect is not a function。大致原因是合约变量是延迟生成的。不能打印或者判断 nft 以及 nft.address 这种 Module 返回的变量及其属性。
如果一定需要,编写脚本调用 ignition.deploy 来执行复杂部署。参看Complex deployments with scripts
另外踩了一个坑,研究将近半天。hardhat 内部网络不会保存部署到 ignition/deployments,所以编写测试时升级操作,状态无法保留。就算使用 useModule 也不会发现现有部署。
设置环境变量,代码中没有给出默认值,必须从 .env 文件读取。将 .env.example 复制一份为 .env,并填写相关内容。
依次执行(一次一行),根据需要自行修改 network 和 deployment-id
cd Task4
bunx hardhat ignition deploy ./ignition/modules/TEEVerifier.ts --network ganache_test --deployment-id "INFT_on_ganache_test"
bunx hardhat ignition deploy ./ignition/modules/Verifier.ts --network ganache_test --deployment-id "INFT_on_ganache_test"
bunx hardhat ignition deploy ./ignition/modules/AgentNFT.ts --network ganache_test --deployment-id "INFT_on_ganache_test"升级方法同理,换成 UpgradeXXX.ts,需要准备好新的实现合约,例如 VerifierV2。
备注:也可以直接执行最后一个,因为 Hardhat 3 会检测到依赖的 Ignition Module 不存在,就会提前部署依赖合约。
- 需要修改里面的 CA 为 Agent NFT 的代理地址
- 按需修改使用的网络
- 按需编辑脚本里面 mock 的内容
bunx hardhat run scripts/mint.ts --network ganache_test
ZG_TESTNET_ETHERSCAN_API_URL = "https://chainscan-galileo.0g.ai/open/api"
AgentNFT-build-info-ganache_main.7z 备份了 用 0.8.28 编译得到的 Standard Input。
可以用于在 blockscout 验证合约。
(AgentNFT + Verifier + TEEVerifier + Beacon + Proxy)
手动验证脚本 scripts\verify.ts,需要充分理解部署原理。
注意事项:
- 按照实现、信标、代理的顺序依次验证。
- 实现合约不需要构建参数,只需要更换地址和 sourceName。
- 信标、代理不需要更换 sourceName,只需要更换构建参数和地址。
- 构建参数比较麻烦,注意看脚本注释。
- 验证后代理合约自动识别到实现地址。