@warptoad/skinny-fat-imt-js 0.0.4 → 0.0.6
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CREATE2.md +218 -0
- package/README.md +47 -3
- package/create2-artifacts/FatIMTPoseidon2Read.create2.json +268 -0
- package/create2-artifacts/FatIMTPoseidon2WriteEvent.create2.json +320 -0
- package/create2-artifacts/FatIMTPoseidon2WriteStorage.create2.json +320 -0
- package/create2-artifacts/SkinnyIMTPoseidon2Read.create2.json +258 -0
- package/create2-artifacts/SkinnyIMTPoseidon2WriteEvent.create2.json +301 -0
- package/create2-artifacts/SkinnyIMTPoseidon2WriteStorage.create2.json +301 -0
- package/create2-artifacts/create2-salts.json +26 -0
- package/dist/Trees.d.ts +5 -68
- package/dist/Trees.d.ts.map +1 -1
- package/dist/Trees.js +78 -41
- package/dist/Trees.js.map +1 -1
- package/dist/abis.js +1 -1
- package/dist/abis.js.map +1 -1
- package/dist/create2/create2.d.ts +144 -0
- package/dist/create2/create2.d.ts.map +1 -0
- package/dist/create2/create2.js +436 -0
- package/dist/create2/create2.js.map +1 -0
- package/dist/create2/index.d.ts +4 -0
- package/dist/create2/index.d.ts.map +1 -0
- package/dist/create2/index.js +4 -0
- package/dist/create2/index.js.map +1 -0
- package/dist/create2/interfaces.d.ts +79 -0
- package/dist/create2/interfaces.d.ts.map +1 -0
- package/dist/create2/interfaces.js +6 -0
- package/dist/create2/interfaces.js.map +1 -0
- package/dist/create2/types.d.ts +73 -0
- package/dist/create2/types.d.ts.map +1 -0
- package/dist/create2/types.js +4 -0
- package/dist/create2/types.js.map +1 -0
- package/dist/eventScanning.d.ts.map +1 -1
- package/dist/eventScanning.js +2 -2
- package/dist/eventScanning.js.map +1 -1
- package/dist/index.d.ts +1 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -0
- package/dist/index.js.map +1 -1
- package/dist/types.d.ts +71 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +12 -0
- package/dist/types.js.map +1 -0
- package/package.json +9 -2
- package/src/Trees.ts +101 -99
- package/src/abis.ts +1 -1
- package/src/create2/create2.ts +643 -0
- package/src/create2/index.ts +3 -0
- package/src/create2/interfaces.ts +69 -0
- package/src/create2/types.ts +88 -0
- package/src/eventScanning.ts +31 -28
- package/src/index.ts +1 -0
- package/src/types.ts +71 -0
|
@@ -0,0 +1,144 @@
|
|
|
1
|
+
import { type Address, type Hex } from "viem";
|
|
2
|
+
import type { MinimalPublicClient, MinimalWalletClient } from "./interfaces.js";
|
|
3
|
+
import type { Create2Artifact, Create2Source, DeployCreate2Result, MakeCreate2Options, VerifyResult } from "./types.js";
|
|
4
|
+
/** The canonical deterministic-deployment-proxy, present on most chains. */
|
|
5
|
+
export declare const DEFAULT_CREATE2_FACTORY: Address;
|
|
6
|
+
/**
|
|
7
|
+
* solc guards public library functions against being CALLed directly by opening the runtime code
|
|
8
|
+
* with `PUSH20 <own address>; ADDRESS; EQ`, and the constructor patches the real address in at
|
|
9
|
+
* deploy time. The compiler's own output carries 20 zero bytes there.
|
|
10
|
+
*
|
|
11
|
+
* Two consequences worth recording: the init code is address-independent, which is exactly why one
|
|
12
|
+
* frozen blob CREATE2s to the same address on every chain; and code read back with `eth_getCode`
|
|
13
|
+
* differs from `deployedBytecode` at those 20 bytes, so a string comparison always fails.
|
|
14
|
+
*/
|
|
15
|
+
export declare function findCallProtectionOffset(deployedBytecode: Hex): number | null;
|
|
16
|
+
/**
|
|
17
|
+
* Freezes a contract into everything needed to deploy it deterministically and verify it later.
|
|
18
|
+
*
|
|
19
|
+
* Pass a contract name (or `path/To.sol:Name`) to resolve it through the surrounding Hardhat
|
|
20
|
+
* project, or pass `{ artifact, buildInfo }` yourself to skip Hardhat entirely.
|
|
21
|
+
*
|
|
22
|
+
* Whichever build profile was last compiled is the one that gets frozen — Hardhat keeps a single
|
|
23
|
+
* `artifacts/` tree, not one per profile — so build with the profile you intend to publish before
|
|
24
|
+
* calling this, and pin every setting in it. Anything left to a solc default will move the address
|
|
25
|
+
* on the next toolchain bump.
|
|
26
|
+
*
|
|
27
|
+
* The result is plain JSON: `writeFile(path, JSON.stringify(artifact))` is a complete, publishable
|
|
28
|
+
* deployment package.
|
|
29
|
+
*/
|
|
30
|
+
export declare function makeCreate2(target: string | Create2Source, options?: MakeCreate2Options): Promise<Create2Artifact>;
|
|
31
|
+
/** Where `initCodeHash` lands for a given factory and salt. Pure — no chain access. */
|
|
32
|
+
export declare function predictCreate2Address({ initCodeHash, salt, factory, }: {
|
|
33
|
+
initCodeHash: Hex;
|
|
34
|
+
salt: Hex;
|
|
35
|
+
factory?: Address;
|
|
36
|
+
}): Address;
|
|
37
|
+
/**
|
|
38
|
+
* The two inputs a vanity miner (create2crunch, createXcrunch, …) needs.
|
|
39
|
+
*
|
|
40
|
+
* The default factory does not bind the salt to a sender, so mine with any caller — and note that
|
|
41
|
+
* anyone can front-run the deployment. That is harmless here: identical init code at the same
|
|
42
|
+
* address is the outcome you wanted anyway.
|
|
43
|
+
*/
|
|
44
|
+
export declare function create2MiningTarget(artifact: Create2Artifact, factory?: Address): {
|
|
45
|
+
factory: Address;
|
|
46
|
+
initCodeHash: Hex;
|
|
47
|
+
};
|
|
48
|
+
/**
|
|
49
|
+
* Deploys the frozen init code through a CREATE2 factory, idempotently.
|
|
50
|
+
*
|
|
51
|
+
* Safe to call unconditionally: if the predicted address already holds code this returns without
|
|
52
|
+
* sending a transaction, which is the normal case on a chain where someone deployed before you.
|
|
53
|
+
*
|
|
54
|
+
* Gas needs care, because a failed CREATE2 **does not revert the caller**. The factory's inner
|
|
55
|
+
* create simply returns the zero address, the factory returns that, and the outer transaction
|
|
56
|
+
* succeeds — burning the gas and deploying nothing. EIP-150 forwards only 63/64 of the remaining
|
|
57
|
+
* gas to the inner call, so a limit that looks sufficient can leave the create just short, and the
|
|
58
|
+
* only symptom is an empty address afterwards. So this estimates and adds headroom rather than
|
|
59
|
+
* trusting a wallet's automatic gas, and re-reads the code afterwards to turn a silent failure
|
|
60
|
+
* into a thrown error. Pass `gas` to override.
|
|
61
|
+
*/
|
|
62
|
+
export declare function sendCreate2({ artifact, salt, walletClient, publicClient, factory, gas, nonce, }: {
|
|
63
|
+
artifact: Create2Artifact;
|
|
64
|
+
salt: Hex;
|
|
65
|
+
walletClient: MinimalWalletClient;
|
|
66
|
+
publicClient: MinimalPublicClient;
|
|
67
|
+
factory?: Address;
|
|
68
|
+
gas?: bigint;
|
|
69
|
+
/**
|
|
70
|
+
* Explicit nonce, for firing several deployments at once. Without it every concurrent call
|
|
71
|
+
* fetches the same pending nonce and they collide; assign consecutive values instead. Skip it
|
|
72
|
+
* for a single deployment and let the wallet choose.
|
|
73
|
+
*/
|
|
74
|
+
nonce?: number;
|
|
75
|
+
}): Promise<DeployCreate2Result>;
|
|
76
|
+
/** {@link sendCreate2} followed by {@link confirmCreate2}: deploy one contract and wait for it. */
|
|
77
|
+
export declare function deployCreate2(args: Parameters<typeof sendCreate2>[0]): Promise<DeployCreate2Result>;
|
|
78
|
+
/**
|
|
79
|
+
* Waits for a deployment transaction and checks that code actually landed.
|
|
80
|
+
*
|
|
81
|
+
* Split out so a batch can send everything first and only then wait: sending is a single fast RPC
|
|
82
|
+
* round trip, waiting is a whole block. Sequential sends followed by concurrent waits is both the
|
|
83
|
+
* fastest safe ordering and the only one that keeps nonces in order — nodes without mempool
|
|
84
|
+
* queueing (Hardhat's auto-mining network among them) reject a nonce that arrives ahead of its
|
|
85
|
+
* predecessor.
|
|
86
|
+
*/
|
|
87
|
+
export declare function confirmCreate2({ address, transactionHash, publicClient, confirmations, timeout, }: {
|
|
88
|
+
address: Address;
|
|
89
|
+
transactionHash: Hex;
|
|
90
|
+
publicClient: MinimalPublicClient;
|
|
91
|
+
/** Blocks to wait on top of the one containing the transaction. Defaults to viem's 1. */
|
|
92
|
+
confirmations?: number;
|
|
93
|
+
/**
|
|
94
|
+
* Give up after this long. Worth setting when asking for more than one confirmation: a chain
|
|
95
|
+
* that only mines on demand (a local node) never produces the next block, so the wait would
|
|
96
|
+
* otherwise never return.
|
|
97
|
+
*/
|
|
98
|
+
timeout?: number;
|
|
99
|
+
}): Promise<void>;
|
|
100
|
+
/**
|
|
101
|
+
* Whether the code at `address` is this contract.
|
|
102
|
+
*
|
|
103
|
+
* A plain comparison against `deployedBytecode` fails for reasons that are not defects: solc's
|
|
104
|
+
* library call protection writes the contract's own address into its runtime code at construction,
|
|
105
|
+
* and immutables are written the same way. Both are zeroed in the compiler's output. This splices
|
|
106
|
+
* the address in and masks the immutables before comparing.
|
|
107
|
+
*/
|
|
108
|
+
export declare function matchesOnchainBytecode(artifact: Create2Artifact, onchainCode: Hex, address: Address): boolean;
|
|
109
|
+
/**
|
|
110
|
+
* Submits to Etherscan's v2 multichain API and polls until it settles.
|
|
111
|
+
*
|
|
112
|
+
* One API key covers every supported chain; the chain is selected by `chainId` in the query string.
|
|
113
|
+
* The contract is verified from the frozen `solcInput`, so this works from a machine that has
|
|
114
|
+
* neither the sources nor a compiler.
|
|
115
|
+
*
|
|
116
|
+
* Safe to call immediately after deploying: a submission for an address Etherscan has not indexed
|
|
117
|
+
* yet is retried rather than reported as a failure, until `timeoutMs`.
|
|
118
|
+
*/
|
|
119
|
+
export declare function verifyOnEtherscan({ artifact, address, chainId, apiKey, apiUrl, pollIntervalMs, timeoutMs, }: {
|
|
120
|
+
artifact: Create2Artifact;
|
|
121
|
+
address: Address;
|
|
122
|
+
chainId: number;
|
|
123
|
+
apiKey: string;
|
|
124
|
+
apiUrl?: string;
|
|
125
|
+
pollIntervalMs?: number;
|
|
126
|
+
timeoutMs?: number;
|
|
127
|
+
}): Promise<VerifyResult>;
|
|
128
|
+
/**
|
|
129
|
+
* Submits to Sourcify's v2 API and polls until the job completes.
|
|
130
|
+
*
|
|
131
|
+
* Sourcify recompiles from `stdJsonInput`, so a `match` of `exact_match` means the metadata hash
|
|
132
|
+
* matched too — which only happens if the build kept it (`bytecodeHash` other than `"none"`).
|
|
133
|
+
* Builds that strip it can still reach a plain `match`.
|
|
134
|
+
*/
|
|
135
|
+
export declare function verifyOnSourcify({ artifact, address, chainId, apiUrl, creationTxHash, pollIntervalMs, timeoutMs, }: {
|
|
136
|
+
artifact: Create2Artifact;
|
|
137
|
+
address: Address;
|
|
138
|
+
chainId: number;
|
|
139
|
+
apiUrl?: string;
|
|
140
|
+
creationTxHash?: Hex;
|
|
141
|
+
pollIntervalMs?: number;
|
|
142
|
+
timeoutMs?: number;
|
|
143
|
+
}): Promise<VerifyResult>;
|
|
144
|
+
//# sourceMappingURL=create2.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"create2.d.ts","sourceRoot":"","sources":["../../src/create2/create2.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,436 @@
|
|
|
1
|
+
// Generic CREATE2 toolkit: turn any Hardhat 3 contract into a self-contained artifact you can
|
|
2
|
+
// deploy, mine a vanity salt against, and verify — on any chain, without recompiling.
|
|
3
|
+
//
|
|
4
|
+
// The problem it solves is that a CREATE2 address is a function of the exact init code, and init
|
|
5
|
+
// code is not reproducible by asking someone to compile the same source. It depends on the solc
|
|
6
|
+
// version, every optimizer setting, the evm target, and — because solc's metadata hash covers the
|
|
7
|
+
// source paths — on the exact paths the build assigned. Hardhat puts npm package versions in those
|
|
8
|
+
// paths, so even a dependency bump with byte-identical Solidity moves the address.
|
|
9
|
+
//
|
|
10
|
+
// So `makeCreate2()` freezes the bytes once, together with the solc input that produced them.
|
|
11
|
+
// Everything downstream works off that frozen object and never compiles anything:
|
|
12
|
+
//
|
|
13
|
+
// makeCreate2() build time, needs Hardhat → Create2Artifact (JSON-serializable)
|
|
14
|
+
// predictCreate2Address() pure
|
|
15
|
+
// deployCreate2() runtime, viem only
|
|
16
|
+
// verifyOnEtherscan() runtime, fetch only
|
|
17
|
+
// verifyOnSourcify() runtime, fetch only
|
|
18
|
+
//
|
|
19
|
+
// Only `makeCreate2` touches Hardhat, and it does so through a dynamic import, so consumers who
|
|
20
|
+
// just deploy a published artifact never need Hardhat installed.
|
|
21
|
+
//
|
|
22
|
+
// This file is the implementation. `./interfaces.ts` holds the foreign shapes it reads (solc's
|
|
23
|
+
// standard JSON, Hardhat's artifact/build-info, the minimal viem clients), `./types.ts` its own
|
|
24
|
+
// inputs and outputs, and `./index.ts` is the `@warptoad/skinny-fat-imt-js/create2` entry point.
|
|
25
|
+
//
|
|
26
|
+
// The verification clients here are ours. Their request and response handling was written against
|
|
27
|
+
// `@nomicfoundation/hardhat-verify`'s `src/internal/{etherscan,sourcify}.ts`, which is the
|
|
28
|
+
// maintained implementation — but it only exposes `verifyContract(args, hre)`, requires a
|
|
29
|
+
// `HardhatRuntimeEnvironment`, and peer-depends on Hardhat, so it cannot be reused from a package
|
|
30
|
+
// meant to work without Hardhat.
|
|
31
|
+
// TODO
|
|
32
|
+
// ----
|
|
33
|
+
// zksync era will work with this shit. But it will run as EVM which is 3x to 5x more expensive then their EraVM
|
|
34
|
+
// but that requires using that whole compiler stack to work. Afaik hardhat 3 supports it now? Not sure
|
|
35
|
+
// Also a EraVM contract cant delegatecall a EVM contract. Normal calls do work, but not libraries
|
|
36
|
+
import { concat, encodeDeployData, getContractAddress, keccak256, } from "viem";
|
|
37
|
+
/** The canonical deterministic-deployment-proxy, present on most chains. */
|
|
38
|
+
export const DEFAULT_CREATE2_FACTORY = "0x4e59b44847b379578588920cA78FbF26c0B4956C";
|
|
39
|
+
// ---------------------------------------------------------------------------
|
|
40
|
+
// makeCreate2
|
|
41
|
+
// ---------------------------------------------------------------------------
|
|
42
|
+
/**
|
|
43
|
+
* solc guards public library functions against being CALLed directly by opening the runtime code
|
|
44
|
+
* with `PUSH20 <own address>; ADDRESS; EQ`, and the constructor patches the real address in at
|
|
45
|
+
* deploy time. The compiler's own output carries 20 zero bytes there.
|
|
46
|
+
*
|
|
47
|
+
* Two consequences worth recording: the init code is address-independent, which is exactly why one
|
|
48
|
+
* frozen blob CREATE2s to the same address on every chain; and code read back with `eth_getCode`
|
|
49
|
+
* differs from `deployedBytecode` at those 20 bytes, so a string comparison always fails.
|
|
50
|
+
*/
|
|
51
|
+
export function findCallProtectionOffset(deployedBytecode) {
|
|
52
|
+
return /^0x73(0{40})3014/.test(deployedBytecode) ? 1 : null;
|
|
53
|
+
}
|
|
54
|
+
/**
|
|
55
|
+
* Substitutes library addresses into the `__$…$__` placeholders solc leaves in creation bytecode.
|
|
56
|
+
*
|
|
57
|
+
* Works off the artifact's `linkReferences` offsets rather than string-replacing the placeholder
|
|
58
|
+
* text: the offsets are exact, and a placeholder hash could in principle collide with unrelated
|
|
59
|
+
* bytes in a large contract.
|
|
60
|
+
*/
|
|
61
|
+
function linkBytecode(bytecode, linkReferences, libraries) {
|
|
62
|
+
const used = {};
|
|
63
|
+
let hex = bytecode.slice(2);
|
|
64
|
+
const missing = [];
|
|
65
|
+
for (const [sourceName, contracts] of Object.entries(linkReferences)) {
|
|
66
|
+
for (const [libraryName, ranges] of Object.entries(contracts)) {
|
|
67
|
+
const address = libraries[`${sourceName}:${libraryName}`] ?? libraries[libraryName];
|
|
68
|
+
if (address === undefined) {
|
|
69
|
+
missing.push(`${sourceName}:${libraryName}`);
|
|
70
|
+
continue;
|
|
71
|
+
}
|
|
72
|
+
const value = address.toLowerCase().replace(/^0x/, "");
|
|
73
|
+
for (const { start, length } of ranges) {
|
|
74
|
+
if (length !== 20) {
|
|
75
|
+
throw new Error(`unexpected link reference length ${length} for ${libraryName}`);
|
|
76
|
+
}
|
|
77
|
+
hex = hex.slice(0, start * 2) + value + hex.slice(start * 2 + 40);
|
|
78
|
+
}
|
|
79
|
+
used[libraryName] = address;
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
if (missing.length > 0) {
|
|
83
|
+
throw new Error(`missing library addresses for: ${missing.join(", ")}\n` +
|
|
84
|
+
"Pass them as `libraries` — unlinked bytecode still contains `__$…$__` placeholders and " +
|
|
85
|
+
"is not deployable. Deploy and mine the libraries first; their addresses become part of " +
|
|
86
|
+
"this contract's init code, and therefore of its address.");
|
|
87
|
+
}
|
|
88
|
+
return { linked: `0x${hex}`, used };
|
|
89
|
+
}
|
|
90
|
+
async function resolveFromHardhat(nameOrFullyQualifiedName) {
|
|
91
|
+
// Dynamic so that merely importing this module does not require Hardhat. Only callers who ask
|
|
92
|
+
// for a contract *by name* need a Hardhat project; everyone else passes the JSON directly.
|
|
93
|
+
let hardhat;
|
|
94
|
+
try {
|
|
95
|
+
hardhat = await import("hardhat");
|
|
96
|
+
}
|
|
97
|
+
catch (cause) {
|
|
98
|
+
throw new Error(`makeCreate2("${nameOrFullyQualifiedName}") resolves contracts through Hardhat, which is not ` +
|
|
99
|
+
"installed here. Either run this inside the Hardhat project that compiled the contract, or " +
|
|
100
|
+
"pass { artifact, buildInfo } directly.", { cause });
|
|
101
|
+
}
|
|
102
|
+
const { artifacts } = hardhat;
|
|
103
|
+
const artifact = (await artifacts.readArtifact(nameOrFullyQualifiedName));
|
|
104
|
+
const buildInfoId = await artifacts.getBuildInfoId(nameOrFullyQualifiedName);
|
|
105
|
+
if (buildInfoId === undefined) {
|
|
106
|
+
throw new Error(`no build-info for ${nameOrFullyQualifiedName} — compile with Hardhat 3 first, using the ` +
|
|
107
|
+
"build profile whose settings you want frozen into the address");
|
|
108
|
+
}
|
|
109
|
+
const buildInfoPath = await artifacts.getBuildInfoPath(buildInfoId);
|
|
110
|
+
const buildInfoOutputPath = await artifacts.getBuildInfoOutputPath(buildInfoId);
|
|
111
|
+
if (buildInfoPath === undefined) {
|
|
112
|
+
throw new Error(`build-info ${buildInfoId} is missing from disk — try a clean rebuild`);
|
|
113
|
+
}
|
|
114
|
+
const { readFile } = await import("node:fs/promises");
|
|
115
|
+
const buildInfo = JSON.parse(await readFile(buildInfoPath, "utf8"));
|
|
116
|
+
const buildInfoOutput = buildInfoOutputPath === undefined
|
|
117
|
+
? undefined
|
|
118
|
+
: JSON.parse(await readFile(buildInfoOutputPath, "utf8"));
|
|
119
|
+
return { artifact, buildInfo, buildInfoOutput };
|
|
120
|
+
}
|
|
121
|
+
/**
|
|
122
|
+
* Freezes a contract into everything needed to deploy it deterministically and verify it later.
|
|
123
|
+
*
|
|
124
|
+
* Pass a contract name (or `path/To.sol:Name`) to resolve it through the surrounding Hardhat
|
|
125
|
+
* project, or pass `{ artifact, buildInfo }` yourself to skip Hardhat entirely.
|
|
126
|
+
*
|
|
127
|
+
* Whichever build profile was last compiled is the one that gets frozen — Hardhat keeps a single
|
|
128
|
+
* `artifacts/` tree, not one per profile — so build with the profile you intend to publish before
|
|
129
|
+
* calling this, and pin every setting in it. Anything left to a solc default will move the address
|
|
130
|
+
* on the next toolchain bump.
|
|
131
|
+
*
|
|
132
|
+
* The result is plain JSON: `writeFile(path, JSON.stringify(artifact))` is a complete, publishable
|
|
133
|
+
* deployment package.
|
|
134
|
+
*/
|
|
135
|
+
export async function makeCreate2(target, options = {}) {
|
|
136
|
+
const { artifact, buildInfo, buildInfoOutput } = typeof target === "string" ? await resolveFromHardhat(target) : target;
|
|
137
|
+
const inputSourceName = artifact.inputSourceName ?? artifact.sourceName;
|
|
138
|
+
const libraries = options.libraries ?? {};
|
|
139
|
+
const { linked, used } = linkBytecode(artifact.bytecode, artifact.linkReferences ?? {}, libraries);
|
|
140
|
+
// The runtime code carries its own placeholders at their own offsets. Linking them here is what
|
|
141
|
+
// makes `matchesOnchainBytecode` work for a contract that delegatecalls libraries.
|
|
142
|
+
const { linked: linkedRuntime } = linkBytecode(artifact.deployedBytecode, artifact.deployedLinkReferences ?? {}, libraries);
|
|
143
|
+
// `encodeDeployData` appends the encoded arguments to the bytecode and handles the
|
|
144
|
+
// no-constructor case, so the init code and the standalone argument blob stay consistent —
|
|
145
|
+
// Etherscan wants the arguments separately, and any mismatch fails verification.
|
|
146
|
+
const initCode = options.constructorArgs === undefined || options.constructorArgs.length === 0
|
|
147
|
+
? linked
|
|
148
|
+
: encodeDeployData({
|
|
149
|
+
abi: artifact.abi,
|
|
150
|
+
bytecode: linked,
|
|
151
|
+
args: options.constructorArgs,
|
|
152
|
+
});
|
|
153
|
+
const constructorArgs = `0x${initCode.slice(linked.length)}`;
|
|
154
|
+
const metadata = buildInfoOutput?.output.contracts[inputSourceName]?.[artifact.contractName]?.metadata;
|
|
155
|
+
return {
|
|
156
|
+
contractName: artifact.contractName,
|
|
157
|
+
sourceName: artifact.sourceName,
|
|
158
|
+
contractIdentifier: `${inputSourceName}:${artifact.contractName}`,
|
|
159
|
+
compilerVersion: buildInfo.solcLongVersion,
|
|
160
|
+
evmVersion: buildInfo.input.settings.evmVersion,
|
|
161
|
+
constructorArgs,
|
|
162
|
+
initCode,
|
|
163
|
+
initCodeHash: keccak256(initCode),
|
|
164
|
+
deployedBytecode: linkedRuntime,
|
|
165
|
+
callProtectionOffset: findCallProtectionOffset(linkedRuntime),
|
|
166
|
+
immutableReferences: artifact.immutableReferences ?? {},
|
|
167
|
+
linkedLibraries: used,
|
|
168
|
+
abi: artifact.abi,
|
|
169
|
+
metadata,
|
|
170
|
+
solcInput: buildInfo.input,
|
|
171
|
+
};
|
|
172
|
+
}
|
|
173
|
+
// ---------------------------------------------------------------------------
|
|
174
|
+
// Address prediction, mining, deployment
|
|
175
|
+
// ---------------------------------------------------------------------------
|
|
176
|
+
/** Where `initCodeHash` lands for a given factory and salt. Pure — no chain access. */
|
|
177
|
+
export function predictCreate2Address({ initCodeHash, salt, factory = DEFAULT_CREATE2_FACTORY, }) {
|
|
178
|
+
return getContractAddress({ opcode: "CREATE2", from: factory, salt, bytecodeHash: initCodeHash });
|
|
179
|
+
}
|
|
180
|
+
/**
|
|
181
|
+
* The two inputs a vanity miner (create2crunch, createXcrunch, …) needs.
|
|
182
|
+
*
|
|
183
|
+
* The default factory does not bind the salt to a sender, so mine with any caller — and note that
|
|
184
|
+
* anyone can front-run the deployment. That is harmless here: identical init code at the same
|
|
185
|
+
* address is the outcome you wanted anyway.
|
|
186
|
+
*/
|
|
187
|
+
export function create2MiningTarget(artifact, factory = DEFAULT_CREATE2_FACTORY) {
|
|
188
|
+
return { factory, initCodeHash: artifact.initCodeHash };
|
|
189
|
+
}
|
|
190
|
+
/**
|
|
191
|
+
* Deploys the frozen init code through a CREATE2 factory, idempotently.
|
|
192
|
+
*
|
|
193
|
+
* Safe to call unconditionally: if the predicted address already holds code this returns without
|
|
194
|
+
* sending a transaction, which is the normal case on a chain where someone deployed before you.
|
|
195
|
+
*
|
|
196
|
+
* Gas needs care, because a failed CREATE2 **does not revert the caller**. The factory's inner
|
|
197
|
+
* create simply returns the zero address, the factory returns that, and the outer transaction
|
|
198
|
+
* succeeds — burning the gas and deploying nothing. EIP-150 forwards only 63/64 of the remaining
|
|
199
|
+
* gas to the inner call, so a limit that looks sufficient can leave the create just short, and the
|
|
200
|
+
* only symptom is an empty address afterwards. So this estimates and adds headroom rather than
|
|
201
|
+
* trusting a wallet's automatic gas, and re-reads the code afterwards to turn a silent failure
|
|
202
|
+
* into a thrown error. Pass `gas` to override.
|
|
203
|
+
*/
|
|
204
|
+
export async function sendCreate2({ artifact, salt, walletClient, publicClient, factory = DEFAULT_CREATE2_FACTORY, gas, nonce, }) {
|
|
205
|
+
const address = predictCreate2Address({ initCodeHash: artifact.initCodeHash, salt, factory });
|
|
206
|
+
const existing = await publicClient.getCode({ address });
|
|
207
|
+
if (existing !== undefined && existing !== "0x") {
|
|
208
|
+
return { address, alreadyDeployed: true };
|
|
209
|
+
}
|
|
210
|
+
const factoryCode = await publicClient.getCode({ address: factory });
|
|
211
|
+
if (factoryCode === undefined || factoryCode === "0x") {
|
|
212
|
+
throw new Error(`no CREATE2 factory at ${factory} on this chain. Deploy one there first, or pass a ` +
|
|
213
|
+
"`factory` that exists — note that a different factory yields a different address.");
|
|
214
|
+
}
|
|
215
|
+
// The canonical proxy takes `salt ‖ initCode` as raw calldata and CREATE2s the remainder.
|
|
216
|
+
const data = concat([salt, artifact.initCode]);
|
|
217
|
+
let gasLimit = gas;
|
|
218
|
+
if (gasLimit === undefined) {
|
|
219
|
+
if (publicClient.estimateGas === undefined) {
|
|
220
|
+
// Falling back to the wallet's automatic gas is exactly how the silent failure above
|
|
221
|
+
// happens, so refuse rather than quietly risk it.
|
|
222
|
+
throw new Error("deployCreate2 needs either a `gas` limit or a public client with `estimateGas`; " +
|
|
223
|
+
"wallet-chosen gas is what produces a successful transaction that deploys nothing.");
|
|
224
|
+
}
|
|
225
|
+
const estimate = await publicClient.estimateGas({
|
|
226
|
+
account: walletClient.account?.address,
|
|
227
|
+
to: factory,
|
|
228
|
+
data,
|
|
229
|
+
});
|
|
230
|
+
// 64/63 covers what EIP-150 withholds from the inner create, and a further 10% absorbs the
|
|
231
|
+
// estimator landing slightly under on a large deployment.
|
|
232
|
+
gasLimit = (estimate * 64n * 110n) / (63n * 100n);
|
|
233
|
+
}
|
|
234
|
+
const transactionHash = await walletClient.sendTransaction({ to: factory, data, gas: gasLimit, nonce });
|
|
235
|
+
return { address, alreadyDeployed: false, transactionHash };
|
|
236
|
+
}
|
|
237
|
+
/** {@link sendCreate2} followed by {@link confirmCreate2}: deploy one contract and wait for it. */
|
|
238
|
+
export async function deployCreate2(args) {
|
|
239
|
+
const sent = await sendCreate2(args);
|
|
240
|
+
if (!sent.alreadyDeployed) {
|
|
241
|
+
await confirmCreate2({
|
|
242
|
+
address: sent.address,
|
|
243
|
+
transactionHash: sent.transactionHash,
|
|
244
|
+
publicClient: args.publicClient,
|
|
245
|
+
});
|
|
246
|
+
}
|
|
247
|
+
return sent;
|
|
248
|
+
}
|
|
249
|
+
/**
|
|
250
|
+
* Waits for a deployment transaction and checks that code actually landed.
|
|
251
|
+
*
|
|
252
|
+
* Split out so a batch can send everything first and only then wait: sending is a single fast RPC
|
|
253
|
+
* round trip, waiting is a whole block. Sequential sends followed by concurrent waits is both the
|
|
254
|
+
* fastest safe ordering and the only one that keeps nonces in order — nodes without mempool
|
|
255
|
+
* queueing (Hardhat's auto-mining network among them) reject a nonce that arrives ahead of its
|
|
256
|
+
* predecessor.
|
|
257
|
+
*/
|
|
258
|
+
export async function confirmCreate2({ address, transactionHash, publicClient, confirmations, timeout, }) {
|
|
259
|
+
await publicClient.waitForTransactionReceipt({ hash: transactionHash, confirmations, timeout });
|
|
260
|
+
const deployed = await publicClient.getCode({ address });
|
|
261
|
+
if (deployed === undefined || deployed === "0x") {
|
|
262
|
+
throw new Error(`transaction ${transactionHash} succeeded but ${address} holds no code.\n` +
|
|
263
|
+
"A failed CREATE2 does not revert the caller, so this is what an out-of-gas inner create " +
|
|
264
|
+
"looks like — the factory returned the zero address and the transaction still reported " +
|
|
265
|
+
"success. Retry with a higher `gas`, or check whether the constructor reverted.");
|
|
266
|
+
}
|
|
267
|
+
}
|
|
268
|
+
/**
|
|
269
|
+
* Whether the code at `address` is this contract.
|
|
270
|
+
*
|
|
271
|
+
* A plain comparison against `deployedBytecode` fails for reasons that are not defects: solc's
|
|
272
|
+
* library call protection writes the contract's own address into its runtime code at construction,
|
|
273
|
+
* and immutables are written the same way. Both are zeroed in the compiler's output. This splices
|
|
274
|
+
* the address in and masks the immutables before comparing.
|
|
275
|
+
*/
|
|
276
|
+
export function matchesOnchainBytecode(artifact, onchainCode, address) {
|
|
277
|
+
let expected = artifact.deployedBytecode.toLowerCase();
|
|
278
|
+
let actual = onchainCode.toLowerCase();
|
|
279
|
+
if (artifact.callProtectionOffset !== null) {
|
|
280
|
+
const start = 2 + artifact.callProtectionOffset * 2;
|
|
281
|
+
expected = expected.slice(0, start) + address.toLowerCase().slice(2) + expected.slice(start + 40);
|
|
282
|
+
}
|
|
283
|
+
for (const ranges of Object.values(artifact.immutableReferences)) {
|
|
284
|
+
for (const { start, length } of ranges) {
|
|
285
|
+
const from = 2 + start * 2;
|
|
286
|
+
const mask = "0".repeat(length * 2);
|
|
287
|
+
expected = expected.slice(0, from) + mask + expected.slice(from + length * 2);
|
|
288
|
+
actual = actual.slice(0, from) + mask + actual.slice(from + length * 2);
|
|
289
|
+
}
|
|
290
|
+
}
|
|
291
|
+
return expected === actual;
|
|
292
|
+
}
|
|
293
|
+
// ---------------------------------------------------------------------------
|
|
294
|
+
// Verification
|
|
295
|
+
// ---------------------------------------------------------------------------
|
|
296
|
+
const ETHERSCAN_API_URL = "https://api.etherscan.io/v2/api";
|
|
297
|
+
const SOURCIFY_API_URL = "https://sourcify.dev/server";
|
|
298
|
+
const sleep = (ms) => new Promise((resolve) => setTimeout(resolve, ms));
|
|
299
|
+
function isAlreadyVerifiedMessage(message) {
|
|
300
|
+
return (message.startsWith("Contract source code already verified") ||
|
|
301
|
+
message.startsWith("Already Verified"));
|
|
302
|
+
}
|
|
303
|
+
/**
|
|
304
|
+
* Etherscan rejects a submission for an address whose code it has not indexed yet.
|
|
305
|
+
*
|
|
306
|
+
* This is the normal response in the first minute or so after a deployment, not a real failure —
|
|
307
|
+
* so it is worth retrying rather than reporting. Same string `hardhat-verify` keys its
|
|
308
|
+
* `isBytecodeMissingInNetworkError` on.
|
|
309
|
+
*/
|
|
310
|
+
function isNotIndexedYetMessage(message) {
|
|
311
|
+
return message.startsWith("Unable to locate ContractCode at");
|
|
312
|
+
}
|
|
313
|
+
/**
|
|
314
|
+
* Submits to Etherscan's v2 multichain API and polls until it settles.
|
|
315
|
+
*
|
|
316
|
+
* One API key covers every supported chain; the chain is selected by `chainId` in the query string.
|
|
317
|
+
* The contract is verified from the frozen `solcInput`, so this works from a machine that has
|
|
318
|
+
* neither the sources nor a compiler.
|
|
319
|
+
*
|
|
320
|
+
* Safe to call immediately after deploying: a submission for an address Etherscan has not indexed
|
|
321
|
+
* yet is retried rather than reported as a failure, until `timeoutMs`.
|
|
322
|
+
*/
|
|
323
|
+
export async function verifyOnEtherscan({ artifact, address, chainId, apiKey, apiUrl = ETHERSCAN_API_URL, pollIntervalMs = 3_000,
|
|
324
|
+
// Covers indexing latency *and* verification, since a fresh deployment has to wait for the
|
|
325
|
+
// explorer to see it before verification can even start.
|
|
326
|
+
timeoutMs = 300_000, }) {
|
|
327
|
+
// `module`, `chainid` and `apikey` ride in the query string on every call; only the action and
|
|
328
|
+
// its own parameters differ between submitting and polling.
|
|
329
|
+
const endpoint = (params) => {
|
|
330
|
+
const url = new URL(apiUrl);
|
|
331
|
+
url.searchParams.set("module", "contract");
|
|
332
|
+
url.searchParams.set("chainid", String(chainId));
|
|
333
|
+
url.searchParams.set("apikey", apiKey);
|
|
334
|
+
for (const [key, value] of Object.entries(params))
|
|
335
|
+
url.searchParams.set(key, value);
|
|
336
|
+
return url;
|
|
337
|
+
};
|
|
338
|
+
const deadline = Date.now() + timeoutMs;
|
|
339
|
+
const submit = async () => {
|
|
340
|
+
const response = await fetch(endpoint({ action: "verifysourcecode" }), {
|
|
341
|
+
method: "POST",
|
|
342
|
+
headers: { "content-type": "application/x-www-form-urlencoded" },
|
|
343
|
+
body: new URLSearchParams({
|
|
344
|
+
contractaddress: address,
|
|
345
|
+
sourceCode: JSON.stringify(artifact.solcInput),
|
|
346
|
+
codeformat: "solidity-standard-json-input",
|
|
347
|
+
contractname: artifact.contractIdentifier,
|
|
348
|
+
compilerversion: `v${artifact.compilerVersion}`,
|
|
349
|
+
// Etherscan wants this unprefixed, and empty when there is no constructor.
|
|
350
|
+
constructorArguments: artifact.constructorArgs.replace(/^0x/, ""),
|
|
351
|
+
}),
|
|
352
|
+
});
|
|
353
|
+
if (!response.ok) {
|
|
354
|
+
throw new Error(`Etherscan returned HTTP ${response.status} for ${artifact.contractName}`);
|
|
355
|
+
}
|
|
356
|
+
return (await response.json());
|
|
357
|
+
};
|
|
358
|
+
// Submitting straight after a deployment usually loses a race with Etherscan's indexer, so keep
|
|
359
|
+
// resubmitting until it has the code — that response is a "not yet", not a rejection.
|
|
360
|
+
let guid;
|
|
361
|
+
for (;;) {
|
|
362
|
+
const submitted = await submit();
|
|
363
|
+
if (isAlreadyVerifiedMessage(submitted.result)) {
|
|
364
|
+
return { outcome: "already-verified", message: submitted.result };
|
|
365
|
+
}
|
|
366
|
+
if (submitted.status === "1") {
|
|
367
|
+
guid = submitted.result;
|
|
368
|
+
break;
|
|
369
|
+
}
|
|
370
|
+
if (!isNotIndexedYetMessage(submitted.result) || Date.now() >= deadline) {
|
|
371
|
+
return { outcome: "failed", message: submitted.result };
|
|
372
|
+
}
|
|
373
|
+
await sleep(pollIntervalMs);
|
|
374
|
+
}
|
|
375
|
+
const statusUrl = endpoint({ action: "checkverifystatus", guid });
|
|
376
|
+
while (Date.now() < deadline) {
|
|
377
|
+
await sleep(pollIntervalMs);
|
|
378
|
+
const status = (await (await fetch(statusUrl)).json());
|
|
379
|
+
if (status.result === "Pending in queue")
|
|
380
|
+
continue;
|
|
381
|
+
if (isAlreadyVerifiedMessage(status.result)) {
|
|
382
|
+
return { outcome: "already-verified", message: status.result, jobId: guid };
|
|
383
|
+
}
|
|
384
|
+
if (status.result === "Pass - Verified") {
|
|
385
|
+
return { outcome: "verified", message: status.result, jobId: guid };
|
|
386
|
+
}
|
|
387
|
+
return { outcome: "failed", message: status.result, jobId: guid };
|
|
388
|
+
}
|
|
389
|
+
throw new Error(`Etherscan verification of ${address} still pending after ${timeoutMs}ms (guid ${guid})`);
|
|
390
|
+
}
|
|
391
|
+
/**
|
|
392
|
+
* Submits to Sourcify's v2 API and polls until the job completes.
|
|
393
|
+
*
|
|
394
|
+
* Sourcify recompiles from `stdJsonInput`, so a `match` of `exact_match` means the metadata hash
|
|
395
|
+
* matched too — which only happens if the build kept it (`bytecodeHash` other than `"none"`).
|
|
396
|
+
* Builds that strip it can still reach a plain `match`.
|
|
397
|
+
*/
|
|
398
|
+
export async function verifyOnSourcify({ artifact, address, chainId, apiUrl = SOURCIFY_API_URL, creationTxHash, pollIntervalMs = 3_000, timeoutMs = 120_000, }) {
|
|
399
|
+
const submission = await fetch(`${apiUrl}/v2/verify/${chainId}/${address}`, {
|
|
400
|
+
method: "POST",
|
|
401
|
+
headers: { "content-type": "application/json" },
|
|
402
|
+
body: JSON.stringify({
|
|
403
|
+
stdJsonInput: artifact.solcInput,
|
|
404
|
+
contractIdentifier: artifact.contractIdentifier,
|
|
405
|
+
compilerVersion: artifact.compilerVersion,
|
|
406
|
+
...(creationTxHash === undefined ? {} : { creationTransactionHash: creationTxHash }),
|
|
407
|
+
}),
|
|
408
|
+
});
|
|
409
|
+
const submitted = (await submission.json());
|
|
410
|
+
if (submitted.customCode === "already_verified") {
|
|
411
|
+
return { outcome: "already-verified", message: submitted.message ?? "already verified" };
|
|
412
|
+
}
|
|
413
|
+
if (!submission.ok || submitted.verificationId === undefined) {
|
|
414
|
+
return { outcome: "failed", message: submitted.message ?? `HTTP ${submission.status}` };
|
|
415
|
+
}
|
|
416
|
+
const verificationId = submitted.verificationId;
|
|
417
|
+
const deadline = Date.now() + timeoutMs;
|
|
418
|
+
while (Date.now() < deadline) {
|
|
419
|
+
await sleep(pollIntervalMs);
|
|
420
|
+
const status = (await (await fetch(`${apiUrl}/v2/verify/${verificationId}`)).json());
|
|
421
|
+
if (!status.isJobCompleted)
|
|
422
|
+
continue;
|
|
423
|
+
if (status.error !== undefined) {
|
|
424
|
+
return { outcome: "failed", message: status.error.message, jobId: verificationId };
|
|
425
|
+
}
|
|
426
|
+
const match = status.contract?.match ?? null;
|
|
427
|
+
return {
|
|
428
|
+
outcome: match === null ? "failed" : "verified",
|
|
429
|
+
message: match === null ? "no match" : match,
|
|
430
|
+
match,
|
|
431
|
+
jobId: verificationId,
|
|
432
|
+
};
|
|
433
|
+
}
|
|
434
|
+
throw new Error(`Sourcify verification of ${address} still pending after ${timeoutMs}ms (job ${verificationId})`);
|
|
435
|
+
}
|
|
436
|
+
//# sourceMappingURL=create2.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"create2.js","sourceRoot":"","sources":["../../src/create2/create2.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/create2/index.ts"],"names":[],"mappings":"AAAA,cAAc,iBAAiB,CAAC;AAChC,cAAc,YAAY,CAAC;AAC3B,cAAc,cAAc,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/create2/index.ts"],"names":[],"mappings":"AAAA,cAAc,iBAAiB,CAAC;AAChC,cAAc,YAAY,CAAC;AAC3B,cAAc,cAAc,CAAC"}
|