克隆链上已验证的合约
要将链上已验证的合约克隆为 Forge 项目,请使用 forge clone
,例如以以太坊主网的 WETH9 为例:
$ forge clone 0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2 WETH9
这将创建一个新的目录 WETH9
,将其配置为一个 Foundry 项目,并将合约的所有源代码克隆到其中。这还会初始化一个新的 git
仓库。
Downloading the source code of 0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2 from Etherscan...
Initializing /home/zhan4987/WETH9...
Installing forge-std in /home/zhan4987/WETH9/lib/forge-std (url: Some("https://github.com/foundry-rs/forge-std"), tag: None)
Cloning into '/home/zhan4987/WETH9/lib/forge-std'...
remote: Enumerating objects: 2243, done.
remote: Counting objects: 100% (2238/2238), done.
remote: Compressing objects: 100% (778/778), done.
remote: Total 2243 (delta 1489), reused 2097 (delta 1391), pack-reused 5
Receiving objects: 100% (2243/2243), 649.07 KiB | 8.89 MiB/s, done.
Resolving deltas: 100% (1489/1489), done.
Installed forge-std v1.8.1
Initialized forge project
Collecting the creation information of 0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2 from Etherscan...
Waiting for 5 seconds to avoid rate limit...
[⠊] Compiling...
[⠒] Compiling 1 files with 0.4.19
[⠢] Solc 0.4.19 finished in 9.50ms
Compiler run successful!
克隆的 Forge 项目除了普通 Forge 项目所需的文件外,还带有一个额外的 .clone.meta
元数据文件。
让我们看看 .clone.meta
文件的样子:
{
"path": "src/Contract.sol",
"targetContract": "WETH9",
"address": "0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2",
"chainId": 1,
"creationTransaction": "0xb95343413e459a0f97461812111254163ae53467855c0d73e0f1e7c5b8442fa3",
"deployer": "0x4f26ffbe5f04ed43630fdc30a87638d53d0b0876",
"constructorArguments": "0x",
"storageLayout": {
"storage": [],
"types": {}
}
}
clone.meta
是一个紧凑的 JSON 数据文件,包含链上合约实例的信息,例如合约地址、构造函数参数等。有关元数据的更多详细信息,请参见 reference。