@rocketh/deploy 0.10.5 → 0.10.7
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/CHANGELOG.md +14 -0
- package/LICENSE +21 -0
- package/dist/index.cjs +47 -1
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.ts +98 -37
- package/dist/index.mjs +48 -2
- package/dist/index.mjs.map +1 -1
- package/package.json +9 -10
- package/src/index.ts +72 -2
- package/tsup.config.ts +0 -5
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,19 @@
|
|
|
1
1
|
# @rocketh/deploy
|
|
2
2
|
|
|
3
|
+
## 0.10.7
|
|
4
|
+
|
|
5
|
+
### Patch Changes
|
|
6
|
+
|
|
7
|
+
- latest dependencies
|
|
8
|
+
- Updated dependencies
|
|
9
|
+
- rocketh@0.10.14
|
|
10
|
+
|
|
11
|
+
## 0.10.6
|
|
12
|
+
|
|
13
|
+
### Patch Changes
|
|
14
|
+
|
|
15
|
+
- rocketh-deploy: add libraries support
|
|
16
|
+
|
|
3
17
|
## 0.10.5
|
|
4
18
|
|
|
5
19
|
### Patch Changes
|
package/LICENSE
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2018-present Ronan Sandford
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|
package/dist/index.cjs
CHANGED
|
@@ -22,6 +22,52 @@ async function broadcastTransaction(env, signer, params) {
|
|
|
22
22
|
});
|
|
23
23
|
}
|
|
24
24
|
}
|
|
25
|
+
function linkRawLibrary(bytecode, libraryName, libraryAddress) {
|
|
26
|
+
const address = libraryAddress.replace("0x", "");
|
|
27
|
+
let encodedLibraryName;
|
|
28
|
+
if (libraryName.startsWith("$") && libraryName.endsWith("$")) {
|
|
29
|
+
encodedLibraryName = libraryName.slice(1, libraryName.length - 1);
|
|
30
|
+
} else {
|
|
31
|
+
encodedLibraryName = viem.keccak256(viem.encodePacked(["string"], [libraryName])).slice(2, 36);
|
|
32
|
+
}
|
|
33
|
+
const pattern = new RegExp(`_+\\$${encodedLibraryName}\\$_+`, "g");
|
|
34
|
+
if (!pattern.exec(bytecode)) {
|
|
35
|
+
throw new Error(`Can't link '${libraryName}' (${encodedLibraryName}) in
|
|
36
|
+
----
|
|
37
|
+
${bytecode}
|
|
38
|
+
----
|
|
39
|
+
`);
|
|
40
|
+
}
|
|
41
|
+
return bytecode.replace(pattern, address);
|
|
42
|
+
}
|
|
43
|
+
function linkRawLibraries(bytecode, libraries) {
|
|
44
|
+
for (const libName of Object.keys(libraries)) {
|
|
45
|
+
const libAddress = libraries[libName];
|
|
46
|
+
bytecode = linkRawLibrary(bytecode, libName, libAddress);
|
|
47
|
+
}
|
|
48
|
+
return bytecode;
|
|
49
|
+
}
|
|
50
|
+
function linkLibraries(artifact, libraries) {
|
|
51
|
+
let bytecode = artifact.bytecode;
|
|
52
|
+
if (libraries) {
|
|
53
|
+
if (artifact.linkReferences) {
|
|
54
|
+
for (const [fileName, fileReferences] of Object.entries(artifact.linkReferences)) {
|
|
55
|
+
for (const [libName, fixups] of Object.entries(fileReferences)) {
|
|
56
|
+
const addr = libraries[libName];
|
|
57
|
+
if (addr === void 0) {
|
|
58
|
+
continue;
|
|
59
|
+
}
|
|
60
|
+
for (const fixup of fixups) {
|
|
61
|
+
bytecode = bytecode.substring(0, 2 + fixup.start * 2) + addr.substring(2) + bytecode.substring(2 + (fixup.start + fixup.length) * 2);
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
} else {
|
|
66
|
+
bytecode = linkRawLibraries(bytecode, libraries);
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
return bytecode;
|
|
70
|
+
}
|
|
25
71
|
rocketh.extendEnvironment((env) => {
|
|
26
72
|
async function execute(deployment, args) {
|
|
27
73
|
const { account, ...viemArgs } = args;
|
|
@@ -171,7 +217,7 @@ rocketh.extendEnvironment((env) => {
|
|
|
171
217
|
}
|
|
172
218
|
}
|
|
173
219
|
const artifactToUse = typeof artifact === "string" ? env.artifacts[artifact] : artifact;
|
|
174
|
-
const bytecode = artifactToUse
|
|
220
|
+
const bytecode = linkLibraries(artifactToUse, options?.libraries);
|
|
175
221
|
const abi = artifactToUse.abi;
|
|
176
222
|
const argsToUse = {
|
|
177
223
|
...viemArgs,
|
package/dist/index.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.cjs","sources":["../src/index.ts"],"sourcesContent":["import {Abi} from 'abitype';\nimport {EIP1193DATA, EIP1193TransactionData} from 'eip-1193';\nimport type {\n\tArtifact,\n\tDeploymentConstruction,\n\tDeployment,\n\tEnvironment,\n\tPendingDeployment,\n\tPartialDeployment,\n\tPendingExecution,\n\tSigner,\n} from 'rocketh';\nimport {extendEnvironment} from 'rocketh';\nimport {\n\tChain,\n\tContractFunctionArgs,\n\tContractFunctionName,\n\tDecodeFunctionResultReturnType,\n\tEncodeDeployDataParameters,\n\tReadContractParameters,\n\tWriteContractParameters,\n\tdecodeFunctionResult,\n\tencodeFunctionData,\n\tkeccak256,\n} from 'viem';\nimport {DeployContractParameters, encodeDeployData} from 'viem';\nimport {logs} from 'named-logs';\n\nconst logger = logs('rocketh-deploy');\n\ndeclare module 'rocketh' {\n\tinterface Environment {\n\t\tdeploy: DeployFunction;\n\t\texecute: ExecuteFunction;\n\t\tread: ReadFunction;\n\t\texecuteByName: ExecuteFunctionByName;\n\t\treadByName: ReadFunctionByName;\n\t}\n}\n\nexport type DeployFunction = <TAbi extends Abi, TChain extends Chain = Chain>(\n\tname: string,\n\targs: DeploymentConstruction<TAbi>,\n\toptions?: DeployOptions\n) => Promise<Deployment<TAbi> & {updated: boolean}>;\n\nexport type ExecuteFunction = <\n\tTAbi extends Abi,\n\tTFunctionName extends ContractFunctionName<TAbi, 'nonpayable' | 'payable'>,\n\tTArgs extends ContractFunctionArgs<TAbi, 'nonpayable' | 'payable', TFunctionName> = ContractFunctionArgs<\n\t\tTAbi,\n\t\t'nonpayable' | 'payable',\n\t\tTFunctionName\n\t>\n>(\n\tdeployment: Deployment<TAbi>,\n\targs: ExecutionArgs<TAbi, TFunctionName, TArgs>\n) => Promise<EIP1193DATA>;\n\nexport type ExecuteFunctionByName = <\n\tTAbi extends Abi,\n\tTFunctionName extends ContractFunctionName<TAbi, 'nonpayable' | 'payable'>,\n\tTArgs extends ContractFunctionArgs<TAbi, 'nonpayable' | 'payable', TFunctionName> = ContractFunctionArgs<\n\t\tTAbi,\n\t\t'nonpayable' | 'payable',\n\t\tTFunctionName\n\t>\n>(\n\tname: string,\n\targs: ExecutionArgs<TAbi, TFunctionName, TArgs>\n) => Promise<EIP1193DATA>;\n\nexport type ReadFunction = <\n\tTAbi extends Abi,\n\tTFunctionName extends ContractFunctionName<TAbi, 'pure' | 'view'>,\n\tTArgs extends ContractFunctionArgs<TAbi, 'pure' | 'view', TFunctionName> = ContractFunctionArgs<\n\t\tTAbi,\n\t\t'pure' | 'view',\n\t\tTFunctionName\n\t>\n>(\n\tdeployment: Deployment<TAbi>,\n\targs: ReadingArgs<TAbi, TFunctionName, TArgs>\n) => Promise<DecodeFunctionResultReturnType<TAbi, TFunctionName>>;\n\nexport type ReadFunctionByName = <\n\tTAbi extends Abi,\n\tTFunctionName extends ContractFunctionName<TAbi, 'pure' | 'view'>,\n\tTArgs extends ContractFunctionArgs<TAbi, 'pure' | 'view', TFunctionName> = ContractFunctionArgs<\n\t\tTAbi,\n\t\t'pure' | 'view',\n\t\tTFunctionName\n\t>\n>(\n\tname: string,\n\targs: ReadingArgs<TAbi, TFunctionName, TArgs>\n) => Promise<DecodeFunctionResultReturnType<TAbi, TFunctionName>>;\n\nexport type ExecutionArgs<\n\tTAbi extends Abi,\n\tTFunctionName extends ContractFunctionName<TAbi, 'nonpayable' | 'payable'>,\n\tTArgs extends ContractFunctionArgs<TAbi, 'nonpayable' | 'payable', TFunctionName> = ContractFunctionArgs<\n\t\tTAbi,\n\t\t'nonpayable' | 'payable',\n\t\tTFunctionName\n\t>\n> = Omit<WriteContractParameters<TAbi, TFunctionName, TArgs>, 'address' | 'abi' | 'account' | 'nonce' | 'chain'> & {\n\taccount: string;\n};\n\nexport type ReadingArgs<\n\tTAbi extends Abi,\n\tTFunctionName extends ContractFunctionName<TAbi, 'pure' | 'view'>,\n\tTArgs extends ContractFunctionArgs<TAbi, 'pure' | 'view', TFunctionName> = ContractFunctionArgs<\n\t\tTAbi,\n\t\t'pure' | 'view',\n\t\tTFunctionName\n\t>\n> = Omit<ReadContractParameters<TAbi, TFunctionName, TArgs>, 'address' | 'abi' | 'account' | 'nonce'> & {\n\taccount?: string;\n};\n\nexport type DeployOptions = {linkedData?: any; deterministic?: boolean | `0x${string}`} & (\n\t| {\n\t\t\tskipIfAlreadyDeployed?: boolean;\n\t }\n\t| {\n\t\t\talwaysOverride?: boolean;\n\t }\n);\n\nasync function broadcastTransaction(\n\tenv: Environment,\n\tsigner: Signer,\n\tparams: [EIP1193TransactionData]\n): Promise<`0x${string}`> {\n\tif (signer.type === 'wallet' || signer.type === 'remote') {\n\t\treturn signer.signer.request({\n\t\t\tmethod: 'eth_sendTransaction',\n\t\t\tparams,\n\t\t});\n\t} else {\n\t\tconst rawTx = await signer.signer.request({\n\t\t\tmethod: 'eth_signTransaction',\n\t\t\tparams,\n\t\t});\n\n\t\treturn env.network.provider.request({\n\t\t\tmethod: 'eth_sendRawTransaction',\n\t\t\tparams: [rawTx],\n\t\t});\n\t}\n}\n\nextendEnvironment((env: Environment) => {\n\tasync function execute<\n\t\tTAbi extends Abi,\n\t\tTFunctionName extends ContractFunctionName<TAbi, 'nonpayable' | 'payable'>,\n\t\tTArgs extends ContractFunctionArgs<TAbi, 'nonpayable' | 'payable', TFunctionName> = ContractFunctionArgs<\n\t\t\tTAbi,\n\t\t\t'nonpayable' | 'payable',\n\t\t\tTFunctionName\n\t\t>\n\t>(deployment: Deployment<TAbi>, args: ExecutionArgs<TAbi, TFunctionName, TArgs>) {\n\t\tconst {account, ...viemArgs} = args;\n\t\tlet address: `0x${string}`;\n\t\tif (account.startsWith('0x')) {\n\t\t\taddress = account as `0x${string}`;\n\t\t} else {\n\t\t\tif (env.namedAccounts) {\n\t\t\t\taddress = env.namedAccounts[account];\n\t\t\t\tif (!address) {\n\t\t\t\t\tthrow new Error(`no address for ${account}`);\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tthrow new Error(`no accounts setup, cannot get address for ${account}`);\n\t\t\t}\n\t\t}\n\n\t\tconst artifactToUse = deployment as unknown as Artifact<TAbi>;\n\t\tconst abi = artifactToUse.abi;\n\t\tconst calldata = encodeFunctionData<TAbi, TFunctionName>({\n\t\t\tabi,\n\t\t\tfunctionName: viemArgs.functionName,\n\t\t\targs: viemArgs.args,\n\t\t} as any);\n\n\t\tconst signer = env.addressSigners[address];\n\n\t\tconst txParam: EIP1193TransactionData = {\n\t\t\tto: deployment.address,\n\t\t\ttype: '0x2',\n\t\t\tfrom: address,\n\t\t\tchainId: `0x${env.network.chain.id.toString(16)}` as `0x${string}`,\n\t\t\tdata: calldata,\n\t\t\tgas: viemArgs.gas && (`0x${viemArgs.gas.toString(16)}` as `0x${string}`),\n\t\t\t// gasPrice: viemArgs.gasPrice && `0x${viemArgs.gasPrice.toString(16)}` as `0x${string}`,\n\t\t\tmaxFeePerGas: viemArgs.maxFeePerGas && (`0x${viemArgs.maxFeePerGas.toString(16)}` as `0x${string}`),\n\t\t\tmaxPriorityFeePerGas:\n\t\t\t\tviemArgs.maxPriorityFeePerGas && (`0x${viemArgs.maxPriorityFeePerGas.toString(16)}` as `0x${string}`),\n\t\t\t// nonce: viemArgs.nonce && (`0x${viemArgs.nonce.toString(16)}` as `0x${string}`),\n\t\t};\n\t\tif (viemArgs.value) {\n\t\t\ttxParam.value = `0x${viemArgs.value?.toString(16)}` as `0x${string}`;\n\t\t}\n\n\t\tlet txHash: `0x${string}`;\n\t\tif (signer.type === 'wallet' || signer.type === 'remote') {\n\t\t\ttxHash = await signer.signer.request({\n\t\t\t\tmethod: 'eth_sendTransaction',\n\t\t\t\tparams: [txParam],\n\t\t\t});\n\t\t} else {\n\t\t\tconst rawTx = await signer.signer.request({\n\t\t\t\tmethod: 'eth_signTransaction',\n\t\t\t\tparams: [txParam],\n\t\t\t});\n\n\t\t\ttxHash = await env.network.provider.request({\n\t\t\t\tmethod: 'eth_sendRawTransaction',\n\t\t\t\tparams: [rawTx],\n\t\t\t});\n\t\t}\n\n\t\tconst pendingExecution: PendingExecution = {\n\t\t\ttype: 'execution',\n\t\t\ttransaction: {hash: txHash, origin: address},\n\t\t\t// description, // TODO\n\t\t\t// TODO we should have the nonce, except for wallet like metamask where it is not usre you get the nonce you start with\n\t\t};\n\t\tawait env.savePendingExecution(pendingExecution);\n\t\treturn txHash;\n\t}\n\n\tasync function executeByName<\n\t\tTAbi extends Abi,\n\t\tTFunctionName extends ContractFunctionName<TAbi, 'nonpayable' | 'payable'>,\n\t\tTArgs extends ContractFunctionArgs<TAbi, 'nonpayable' | 'payable', TFunctionName> = ContractFunctionArgs<\n\t\t\tTAbi,\n\t\t\t'nonpayable' | 'payable',\n\t\t\tTFunctionName\n\t\t>\n\t>(name: string, args: ExecutionArgs<TAbi, TFunctionName, TArgs>) {\n\t\tconst deployment = env.getOrNull<TAbi>(name);\n\t\tif (!deployment) {\n\t\t\tthrow new Error(`no deployment named ${name}`);\n\t\t}\n\n\t\treturn execute(deployment, args);\n\t}\n\n\tasync function read<\n\t\tTAbi extends Abi,\n\t\tTFunctionName extends ContractFunctionName<TAbi, 'pure' | 'view'>,\n\t\tTArgs extends ContractFunctionArgs<TAbi, 'pure' | 'view', TFunctionName> = ContractFunctionArgs<\n\t\t\tTAbi,\n\t\t\t'pure' | 'view',\n\t\t\tTFunctionName\n\t\t>\n\t>(\n\t\tdeployment: Deployment<TAbi>,\n\t\targs: ReadingArgs<TAbi, TFunctionName, TArgs>\n\t): Promise<DecodeFunctionResultReturnType<TAbi, TFunctionName>> {\n\t\tconst {account, ...viemArgs} = args;\n\t\tlet address: `0x${string}` | undefined;\n\t\tif (account) {\n\t\t\tif (account.startsWith('0x')) {\n\t\t\t\taddress = account as `0x${string}`;\n\t\t\t} else {\n\t\t\t\tif (env.namedAccounts) {\n\t\t\t\t\taddress = env.namedAccounts[account];\n\t\t\t\t\tif (!address) {\n\t\t\t\t\t\tthrow new Error(`no address for ${account}`);\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tthrow new Error(`no accounts setup, cannot get address for ${account}`);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tconst artifactToUse = deployment as unknown as Artifact<TAbi>;\n\t\tconst abi = artifactToUse.abi;\n\t\tconst calldata = encodeFunctionData<TAbi, TFunctionName>({\n\t\t\tabi,\n\t\t\tfunctionName: viemArgs.functionName,\n\t\t\targs: viemArgs.args,\n\t\t} as any);\n\n\t\tconst result: `0x${string}` = (await env.network.provider.request({\n\t\t\tmethod: 'eth_call',\n\t\t\tparams: [\n\t\t\t\t{\n\t\t\t\t\tto: deployment.address,\n\t\t\t\t\ttype: '0x2',\n\t\t\t\t\tfrom: address,\n\t\t\t\t\tchainId: `0x${env.network.chain.id.toString(16)}` as `0x${string}`,\n\t\t\t\t\tdata: calldata,\n\t\t\t\t\t// value: `0x${viemArgs.value?.toString(16)}` as `0x${string}`,\n\t\t\t\t},\n\t\t\t],\n\t\t})) as `0x${string}`;\n\n\t\tconst parsed = decodeFunctionResult<TAbi, TFunctionName>({\n\t\t\tabi,\n\t\t\tfunctionName: viemArgs.functionName,\n\t\t\tdata: result,\n\t\t\targs: viemArgs.args,\n\t\t} as any);\n\n\t\treturn parsed as DecodeFunctionResultReturnType<TAbi, TFunctionName>;\n\t}\n\n\tasync function readByName<\n\t\tTAbi extends Abi,\n\t\tTFunctionName extends ContractFunctionName<TAbi, 'pure' | 'view'>,\n\t\tTArgs extends ContractFunctionArgs<TAbi, 'pure' | 'view', TFunctionName> = ContractFunctionArgs<\n\t\t\tTAbi,\n\t\t\t'pure' | 'view',\n\t\t\tTFunctionName\n\t\t>\n\t>(\n\t\tname: string,\n\t\targs: ReadingArgs<TAbi, TFunctionName, TArgs>\n\t): Promise<DecodeFunctionResultReturnType<TAbi, TFunctionName>> {\n\t\tconst deployment = env.getOrNull<TAbi>(name);\n\t\tif (!deployment) {\n\t\t\tthrow new Error(`no deployment named ${name}`);\n\t\t}\n\n\t\treturn read(deployment, args);\n\t}\n\tasync function deploy<TAbi extends Abi>(\n\t\tname: string,\n\t\targs: DeploymentConstruction<TAbi>,\n\t\toptions?: DeployOptions\n\t): Promise<Deployment<TAbi> & {updated: boolean}> {\n\t\tconst skipIfAlreadyDeployed = options && 'skipIfAlreadyDeployed' in options && options.skipIfAlreadyDeployed;\n\t\tconst allwaysOverride = options && 'allwaysOverride' in options && options.allwaysOverride;\n\n\t\tif (allwaysOverride && skipIfAlreadyDeployed) {\n\t\t\tthrow new Error(`conflicting options: \"allwaysOverride\" and \"skipIfAlreadyDeployed\"`);\n\t\t}\n\n\t\tconst existingDeployment = env.getOrNull(name);\n\t\tif (existingDeployment && skipIfAlreadyDeployed) {\n\t\t\tlogger.info(`deployment for ${name} at ${existingDeployment.address}, skipIfAlreadyDeployed: true => we skip`);\n\t\t\treturn {...(existingDeployment as Deployment<TAbi>), updated: false};\n\t\t}\n\n\t\tconst {account, artifact, ...viemArgs} = args;\n\t\tlet address: `0x${string}`;\n\t\tif (account.startsWith('0x')) {\n\t\t\taddress = account as `0x${string}`;\n\t\t} else {\n\t\t\tif (env.namedAccounts) {\n\t\t\t\taddress = env.namedAccounts[account];\n\t\t\t\tif (!address) {\n\t\t\t\t\tthrow new Error(`no address for ${account}`);\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tthrow new Error(`no accounts setup, cannot get address for ${account}`);\n\t\t\t}\n\t\t}\n\n\t\t// TODO throw specific error if artifact not found\n\t\tconst artifactToUse = (typeof artifact === 'string' ? env.artifacts[artifact] : artifact) as Artifact<TAbi>;\n\n\t\tconst bytecode = artifactToUse.bytecode;\n\t\tconst abi = artifactToUse.abi;\n\n\t\tconst argsToUse = {\n\t\t\t...viemArgs,\n\t\t\taccount,\n\t\t\tabi,\n\t\t\tbytecode,\n\t\t};\n\n\t\tconst calldata = encodeDeployData(argsToUse as any); // TODO any\n\t\tconst argsData = `0x${calldata.replace(bytecode, '')}` as `0x${string}`;\n\n\t\tif (existingDeployment) {\n\t\t\tlogger.info(`existing deployment for ${name} at ${existingDeployment.address}`);\n\t\t}\n\n\t\tif (existingDeployment && !allwaysOverride) {\n\t\t\tconst previousBytecode = existingDeployment.bytecode;\n\t\t\tconst previousArgsData = existingDeployment.argsData;\n\t\t\t// we assume cbor encoding of hash at the end\n\t\t\t// TODO option to remove it, can parse metadata but would rather avoid this here\n\t\t\tconst last2Bytes = previousBytecode.slice(-4);\n\t\t\tconst cborLength = parseInt(last2Bytes, 16);\n\t\t\tconst previousBytecodeWithoutCBOR = previousBytecode.slice(0, -cborLength * 2);\n\t\t\tconst newBytecodeWithoutCBOR = bytecode.slice(0, -cborLength * 2);\n\t\t\tif (previousBytecodeWithoutCBOR === newBytecodeWithoutCBOR && previousArgsData === argsData) {\n\t\t\t\treturn {...(existingDeployment as Deployment<TAbi>), updated: false};\n\t\t\t} else {\n\t\t\t\t// logger.info(`-------------- WITHOUT CBOR---------------------`);\n\t\t\t\t// logger.info(previousBytecodeWithoutCBOR);\n\t\t\t\t// logger.info(newBytecodeWithoutCBOR);\n\t\t\t\t// logger.info(`-----------------------------------`);\n\t\t\t\t// logger.info(`-------------- ARGS DATA ---------------------`);\n\t\t\t\t// logger.info(previousArgsData);\n\t\t\t\t// logger.info(argsData);\n\t\t\t\t// logger.info(`-----------------------------------`);\n\t\t\t}\n\t\t}\n\n\t\tconst partialDeployment: PartialDeployment<TAbi> = {\n\t\t\t...artifactToUse,\n\t\t\targsData,\n\t\t\tlinkedData: options?.linkedData,\n\t\t};\n\n\t\tconst signer = env.addressSigners[address];\n\n\t\tconst chainId = `0x${env.network.chain.id.toString(16)}` as `0x${string}`;\n\t\tconst maxFeePerGas = viemArgs.maxFeePerGas && (`0x${viemArgs.maxFeePerGas.toString(16)}` as `0x${string}`);\n\t\tconst maxPriorityFeePerGas =\n\t\t\tviemArgs.maxPriorityFeePerGas && (`0x${viemArgs.maxPriorityFeePerGas.toString(16)}` as `0x${string}`);\n\n\t\tconst params: [EIP1193TransactionData] = [\n\t\t\t{\n\t\t\t\ttype: '0x2',\n\t\t\t\tfrom: address,\n\t\t\t\tchainId,\n\t\t\t\tdata: calldata,\n\t\t\t\tgas: viemArgs.gas && (`0x${viemArgs.gas.toString(16)}` as `0x${string}`),\n\t\t\t\tmaxFeePerGas,\n\t\t\t\tmaxPriorityFeePerGas,\n\t\t\t\t// gasPrice: viemArgs.gasPrice && `0x${viemArgs.gasPrice.toString(16)}` as `0x${string}`,\n\t\t\t\t// value: `0x${viemArgs.value?.toString(16)}` as `0x${string}`,\n\t\t\t\t// nonce: viemArgs.nonce && (`0x${viemArgs.nonce.toString(16)}` as `0x${string}`),\n\t\t\t},\n\t\t];\n\n\t\tlet expectedAddress: `0x${string}` | undefined = undefined;\n\t\tif (options?.deterministic) {\n\t\t\t// TODO make these configurable\n\t\t\tconst deterministicFactoryAddress = `0x4e59b44847b379578588920ca78fbf26c0b4956c`;\n\t\t\tconst deterministicFactoryDeployerAddress = `0x3fab184622dc19b6109349b94811493bf2a45362`;\n\t\t\tconst factoryDeploymentData = `0xf8a58085174876e800830186a08080b853604580600e600039806000f350fe7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe03601600081602082378035828234f58015156039578182fd5b8082525050506014600cf31ba02222222222222222222222222222222222222222222222222222222222222222a02222222222222222222222222222222222222222222222222222222222222222`;\n\n\t\t\tconst code = await env.network.provider.request({\n\t\t\t\tmethod: 'eth_getCode',\n\t\t\t\tparams: [deterministicFactoryAddress, 'latest'],\n\t\t\t});\n\t\t\tif (code === '0x') {\n\t\t\t\tconst balanceHexString = await env.network.provider.request({\n\t\t\t\t\tmethod: 'eth_getBalance',\n\t\t\t\t\tparams: [deterministicFactoryDeployerAddress, 'latest'],\n\t\t\t\t});\n\t\t\t\tconst balance = BigInt(balanceHexString);\n\t\t\t\tif (balance < 10000000000000000n) {\n\t\t\t\t\tconst need = 10000000000000000n - balance;\n\t\t\t\t\tconst balanceToSend = `0x${need.toString(16)}` as `0x${string}`;\n\t\t\t\t\tconst txHash = await broadcastTransaction(env, signer, [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\ttype: '0x2',\n\t\t\t\t\t\t\tchainId,\n\t\t\t\t\t\t\tfrom: address,\n\t\t\t\t\t\t\tto: deterministicFactoryDeployerAddress,\n\t\t\t\t\t\t\tvalue: balanceToSend,\n\t\t\t\t\t\t\tgas: `0x${BigInt(21000).toString(16)}`,\n\t\t\t\t\t\t\tmaxFeePerGas,\n\t\t\t\t\t\t\tmaxPriorityFeePerGas,\n\t\t\t\t\t\t},\n\t\t\t\t\t]);\n\t\t\t\t\tawait env.savePendingExecution({\n\t\t\t\t\t\ttype: 'execution', // TODO different type ?\n\t\t\t\t\t\ttransaction: {hash: txHash, origin: address},\n\t\t\t\t\t});\n\t\t\t\t}\n\n\t\t\t\tconst txHash = await env.network.provider.request({\n\t\t\t\t\tmethod: 'eth_sendRawTransaction',\n\t\t\t\t\tparams: [factoryDeploymentData],\n\t\t\t\t});\n\t\t\t\tawait env.savePendingExecution({\n\t\t\t\t\ttype: 'execution', // TODO different type ?\n\t\t\t\t\ttransaction: {hash: txHash, origin: address},\n\t\t\t\t});\n\t\t\t}\n\n\t\t\t// prepending the salt\n\t\t\tconst salt = (\n\t\t\t\ttypeof options.deterministic === 'string'\n\t\t\t\t\t? `0x${options.deterministic.slice(2).padStart(64, '0')}`\n\t\t\t\t\t: '0x0000000000000000000000000000000000000000000000000000000000000000'\n\t\t\t) as `0x${string}`;\n\n\t\t\tconst bytecode = params[0].data || '0x';\n\n\t\t\texpectedAddress = ('0x' +\n\t\t\t\tkeccak256(`0xff${deterministicFactoryAddress.slice(2)}${salt.slice(2)}${keccak256(bytecode).slice(2)}`).slice(\n\t\t\t\t\t-40\n\t\t\t\t)) as `0x${string}`;\n\n\t\t\tconst codeAlreadyDeployed = await env.network.provider.request({\n\t\t\t\tmethod: 'eth_getCode',\n\t\t\t\tparams: [expectedAddress, 'latest'],\n\t\t\t});\n\n\t\t\tif (codeAlreadyDeployed !== '0x') {\n\t\t\t\tenv.showMessage(`contract was already deterministically deployed at ${expectedAddress}`);\n\t\t\t\tconst deployment = await env.save(name, {\n\t\t\t\t\taddress: expectedAddress,\n\t\t\t\t\t...partialDeployment,\n\t\t\t\t});\n\t\t\t\treturn {...(deployment as Deployment<TAbi>), updated: true};\n\t\t\t}\n\n\t\t\tparams[0].data = (salt + (bytecode.slice(2) || '')) as `0x${string}`;\n\t\t\tparams[0].to = deterministicFactoryAddress;\n\t\t}\n\n\t\tconst txHash = await broadcastTransaction(env, signer, params);\n\n\t\tconst pendingDeployment: PendingDeployment<TAbi> = {\n\t\t\ttype: 'deployment',\n\t\t\texpectedAddress,\n\t\t\tpartialDeployment,\n\t\t\ttransaction: {hash: txHash, origin: address},\n\t\t\tname,\n\t\t\t// TODO we should have the nonce, except for wallet like metamask where it is not usre you get the nonce you start with\n\t\t};\n\t\tconst deployment = await env.savePendingDeployment(pendingDeployment);\n\t\treturn {...(deployment as Deployment<TAbi>), updated: true};\n\t}\n\n\tenv.deploy = deploy;\n\tenv.execute = execute;\n\tenv.executeByName = executeByName;\n\tenv.read = read;\n\tenv.readByName = readByName;\n\treturn env;\n});\n"],"names":["logs","extendEnvironment","encodeFunctionData","decodeFunctionResult","encodeDeployData","keccak256"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.cjs","sources":["../src/index.ts"],"sourcesContent":["import {Abi} from 'abitype';\nimport {EIP1193DATA, EIP1193TransactionData} from 'eip-1193';\nimport type {\n\tArtifact,\n\tDeploymentConstruction,\n\tDeployment,\n\tEnvironment,\n\tPendingDeployment,\n\tPartialDeployment,\n\tPendingExecution,\n\tSigner,\n} from 'rocketh';\nimport {extendEnvironment} from 'rocketh';\nimport {\n\tAddress,\n\tChain,\n\tContractFunctionArgs,\n\tContractFunctionName,\n\tDecodeFunctionResultReturnType,\n\tEncodeDeployDataParameters,\n\tReadContractParameters,\n\tWriteContractParameters,\n\tdecodeFunctionResult,\n\tencodeFunctionData,\n\tencodePacked,\n\tkeccak256,\n} from 'viem';\nimport {DeployContractParameters, encodeDeployData} from 'viem';\nimport {logs} from 'named-logs';\n\nconst logger = logs('rocketh-deploy');\n\ndeclare module 'rocketh' {\n\tinterface Environment {\n\t\tdeploy: DeployFunction;\n\t\texecute: ExecuteFunction;\n\t\tread: ReadFunction;\n\t\texecuteByName: ExecuteFunctionByName;\n\t\treadByName: ReadFunctionByName;\n\t}\n}\n\nexport type DeployFunction = <TAbi extends Abi, TChain extends Chain = Chain>(\n\tname: string,\n\targs: DeploymentConstruction<TAbi>,\n\toptions?: DeployOptions\n) => Promise<Deployment<TAbi> & {updated: boolean}>;\n\nexport type ExecuteFunction = <\n\tTAbi extends Abi,\n\tTFunctionName extends ContractFunctionName<TAbi, 'nonpayable' | 'payable'>,\n\tTArgs extends ContractFunctionArgs<TAbi, 'nonpayable' | 'payable', TFunctionName> = ContractFunctionArgs<\n\t\tTAbi,\n\t\t'nonpayable' | 'payable',\n\t\tTFunctionName\n\t>\n>(\n\tdeployment: Deployment<TAbi>,\n\targs: ExecutionArgs<TAbi, TFunctionName, TArgs>\n) => Promise<EIP1193DATA>;\n\nexport type ExecuteFunctionByName = <\n\tTAbi extends Abi,\n\tTFunctionName extends ContractFunctionName<TAbi, 'nonpayable' | 'payable'>,\n\tTArgs extends ContractFunctionArgs<TAbi, 'nonpayable' | 'payable', TFunctionName> = ContractFunctionArgs<\n\t\tTAbi,\n\t\t'nonpayable' | 'payable',\n\t\tTFunctionName\n\t>\n>(\n\tname: string,\n\targs: ExecutionArgs<TAbi, TFunctionName, TArgs>\n) => Promise<EIP1193DATA>;\n\nexport type ReadFunction = <\n\tTAbi extends Abi,\n\tTFunctionName extends ContractFunctionName<TAbi, 'pure' | 'view'>,\n\tTArgs extends ContractFunctionArgs<TAbi, 'pure' | 'view', TFunctionName> = ContractFunctionArgs<\n\t\tTAbi,\n\t\t'pure' | 'view',\n\t\tTFunctionName\n\t>\n>(\n\tdeployment: Deployment<TAbi>,\n\targs: ReadingArgs<TAbi, TFunctionName, TArgs>\n) => Promise<DecodeFunctionResultReturnType<TAbi, TFunctionName>>;\n\nexport type ReadFunctionByName = <\n\tTAbi extends Abi,\n\tTFunctionName extends ContractFunctionName<TAbi, 'pure' | 'view'>,\n\tTArgs extends ContractFunctionArgs<TAbi, 'pure' | 'view', TFunctionName> = ContractFunctionArgs<\n\t\tTAbi,\n\t\t'pure' | 'view',\n\t\tTFunctionName\n\t>\n>(\n\tname: string,\n\targs: ReadingArgs<TAbi, TFunctionName, TArgs>\n) => Promise<DecodeFunctionResultReturnType<TAbi, TFunctionName>>;\n\nexport type ExecutionArgs<\n\tTAbi extends Abi,\n\tTFunctionName extends ContractFunctionName<TAbi, 'nonpayable' | 'payable'>,\n\tTArgs extends ContractFunctionArgs<TAbi, 'nonpayable' | 'payable', TFunctionName> = ContractFunctionArgs<\n\t\tTAbi,\n\t\t'nonpayable' | 'payable',\n\t\tTFunctionName\n\t>\n> = Omit<WriteContractParameters<TAbi, TFunctionName, TArgs>, 'address' | 'abi' | 'account' | 'nonce' | 'chain'> & {\n\taccount: string;\n};\n\nexport type ReadingArgs<\n\tTAbi extends Abi,\n\tTFunctionName extends ContractFunctionName<TAbi, 'pure' | 'view'>,\n\tTArgs extends ContractFunctionArgs<TAbi, 'pure' | 'view', TFunctionName> = ContractFunctionArgs<\n\t\tTAbi,\n\t\t'pure' | 'view',\n\t\tTFunctionName\n\t>\n> = Omit<ReadContractParameters<TAbi, TFunctionName, TArgs>, 'address' | 'abi' | 'account' | 'nonce'> & {\n\taccount?: string;\n};\n\nexport type DeployOptions = {\n\tlinkedData?: any;\n\tdeterministic?: boolean | `0x${string}`;\n\tlibraries?: {[name: string]: Address};\n} & (\n\t| {\n\t\t\tskipIfAlreadyDeployed?: boolean;\n\t }\n\t| {\n\t\t\talwaysOverride?: boolean;\n\t }\n);\n\nasync function broadcastTransaction(\n\tenv: Environment,\n\tsigner: Signer,\n\tparams: [EIP1193TransactionData]\n): Promise<`0x${string}`> {\n\tif (signer.type === 'wallet' || signer.type === 'remote') {\n\t\treturn signer.signer.request({\n\t\t\tmethod: 'eth_sendTransaction',\n\t\t\tparams,\n\t\t});\n\t} else {\n\t\tconst rawTx = await signer.signer.request({\n\t\t\tmethod: 'eth_signTransaction',\n\t\t\tparams,\n\t\t});\n\n\t\treturn env.network.provider.request({\n\t\t\tmethod: 'eth_sendRawTransaction',\n\t\t\tparams: [rawTx],\n\t\t});\n\t}\n}\n\nfunction linkRawLibrary(bytecode: string, libraryName: string, libraryAddress: string): string {\n\tconst address = libraryAddress.replace('0x', '');\n\tlet encodedLibraryName;\n\tif (libraryName.startsWith('$') && libraryName.endsWith('$')) {\n\t\tencodedLibraryName = libraryName.slice(1, libraryName.length - 1);\n\t} else {\n\t\tencodedLibraryName = keccak256(encodePacked(['string'], [libraryName])).slice(2, 36);\n\t}\n\tconst pattern = new RegExp(`_+\\\\$${encodedLibraryName}\\\\$_+`, 'g');\n\tif (!pattern.exec(bytecode)) {\n\t\tthrow new Error(`Can't link '${libraryName}' (${encodedLibraryName}) in \\n----\\n ${bytecode}\\n----\\n`);\n\t}\n\treturn bytecode.replace(pattern, address);\n}\n\nfunction linkRawLibraries(bytecode: string, libraries: {[libraryName: string]: Address}): string {\n\tfor (const libName of Object.keys(libraries)) {\n\t\tconst libAddress = libraries[libName];\n\t\tbytecode = linkRawLibrary(bytecode, libName, libAddress);\n\t}\n\treturn bytecode;\n}\n\nfunction linkLibraries(\n\tartifact: {\n\t\tbytecode: string;\n\t\tlinkReferences?: {\n\t\t\t[libraryFileName: string]: {\n\t\t\t\t[libraryName: string]: Array<{length: number; start: number}>;\n\t\t\t};\n\t\t};\n\t},\n\tlibraries?: {[libraryName: string]: Address}\n) {\n\tlet bytecode = artifact.bytecode;\n\n\tif (libraries) {\n\t\tif (artifact.linkReferences) {\n\t\t\tfor (const [fileName, fileReferences] of Object.entries(artifact.linkReferences)) {\n\t\t\t\tfor (const [libName, fixups] of Object.entries(fileReferences)) {\n\t\t\t\t\tconst addr = libraries[libName];\n\t\t\t\t\tif (addr === undefined) {\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\n\t\t\t\t\tfor (const fixup of fixups) {\n\t\t\t\t\t\tbytecode =\n\t\t\t\t\t\t\tbytecode.substring(0, 2 + fixup.start * 2) +\n\t\t\t\t\t\t\taddr.substring(2) +\n\t\t\t\t\t\t\tbytecode.substring(2 + (fixup.start + fixup.length) * 2);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t} else {\n\t\t\tbytecode = linkRawLibraries(bytecode, libraries);\n\t\t}\n\t}\n\n\t// TODO return libraries object with path name <filepath.sol>:<name> for names\n\n\treturn bytecode;\n}\n\nextendEnvironment((env: Environment) => {\n\tasync function execute<\n\t\tTAbi extends Abi,\n\t\tTFunctionName extends ContractFunctionName<TAbi, 'nonpayable' | 'payable'>,\n\t\tTArgs extends ContractFunctionArgs<TAbi, 'nonpayable' | 'payable', TFunctionName> = ContractFunctionArgs<\n\t\t\tTAbi,\n\t\t\t'nonpayable' | 'payable',\n\t\t\tTFunctionName\n\t\t>\n\t>(deployment: Deployment<TAbi>, args: ExecutionArgs<TAbi, TFunctionName, TArgs>) {\n\t\tconst {account, ...viemArgs} = args;\n\t\tlet address: `0x${string}`;\n\t\tif (account.startsWith('0x')) {\n\t\t\taddress = account as `0x${string}`;\n\t\t} else {\n\t\t\tif (env.namedAccounts) {\n\t\t\t\taddress = env.namedAccounts[account];\n\t\t\t\tif (!address) {\n\t\t\t\t\tthrow new Error(`no address for ${account}`);\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tthrow new Error(`no accounts setup, cannot get address for ${account}`);\n\t\t\t}\n\t\t}\n\n\t\tconst artifactToUse = deployment as unknown as Artifact<TAbi>;\n\t\tconst abi = artifactToUse.abi;\n\t\tconst calldata = encodeFunctionData<TAbi, TFunctionName>({\n\t\t\tabi,\n\t\t\tfunctionName: viemArgs.functionName,\n\t\t\targs: viemArgs.args,\n\t\t} as any);\n\n\t\tconst signer = env.addressSigners[address];\n\n\t\tconst txParam: EIP1193TransactionData = {\n\t\t\tto: deployment.address,\n\t\t\ttype: '0x2',\n\t\t\tfrom: address,\n\t\t\tchainId: `0x${env.network.chain.id.toString(16)}` as `0x${string}`,\n\t\t\tdata: calldata,\n\t\t\tgas: viemArgs.gas && (`0x${viemArgs.gas.toString(16)}` as `0x${string}`),\n\t\t\t// gasPrice: viemArgs.gasPrice && `0x${viemArgs.gasPrice.toString(16)}` as `0x${string}`,\n\t\t\tmaxFeePerGas: viemArgs.maxFeePerGas && (`0x${viemArgs.maxFeePerGas.toString(16)}` as `0x${string}`),\n\t\t\tmaxPriorityFeePerGas:\n\t\t\t\tviemArgs.maxPriorityFeePerGas && (`0x${viemArgs.maxPriorityFeePerGas.toString(16)}` as `0x${string}`),\n\t\t\t// nonce: viemArgs.nonce && (`0x${viemArgs.nonce.toString(16)}` as `0x${string}`),\n\t\t};\n\t\tif (viemArgs.value) {\n\t\t\ttxParam.value = `0x${viemArgs.value?.toString(16)}` as `0x${string}`;\n\t\t}\n\n\t\tlet txHash: `0x${string}`;\n\t\tif (signer.type === 'wallet' || signer.type === 'remote') {\n\t\t\ttxHash = await signer.signer.request({\n\t\t\t\tmethod: 'eth_sendTransaction',\n\t\t\t\tparams: [txParam],\n\t\t\t});\n\t\t} else {\n\t\t\tconst rawTx = await signer.signer.request({\n\t\t\t\tmethod: 'eth_signTransaction',\n\t\t\t\tparams: [txParam],\n\t\t\t});\n\n\t\t\ttxHash = await env.network.provider.request({\n\t\t\t\tmethod: 'eth_sendRawTransaction',\n\t\t\t\tparams: [rawTx],\n\t\t\t});\n\t\t}\n\n\t\tconst pendingExecution: PendingExecution = {\n\t\t\ttype: 'execution',\n\t\t\ttransaction: {hash: txHash, origin: address},\n\t\t\t// description, // TODO\n\t\t\t// TODO we should have the nonce, except for wallet like metamask where it is not usre you get the nonce you start with\n\t\t};\n\t\tawait env.savePendingExecution(pendingExecution);\n\t\treturn txHash;\n\t}\n\n\tasync function executeByName<\n\t\tTAbi extends Abi,\n\t\tTFunctionName extends ContractFunctionName<TAbi, 'nonpayable' | 'payable'>,\n\t\tTArgs extends ContractFunctionArgs<TAbi, 'nonpayable' | 'payable', TFunctionName> = ContractFunctionArgs<\n\t\t\tTAbi,\n\t\t\t'nonpayable' | 'payable',\n\t\t\tTFunctionName\n\t\t>\n\t>(name: string, args: ExecutionArgs<TAbi, TFunctionName, TArgs>) {\n\t\tconst deployment = env.getOrNull<TAbi>(name);\n\t\tif (!deployment) {\n\t\t\tthrow new Error(`no deployment named ${name}`);\n\t\t}\n\n\t\treturn execute(deployment, args);\n\t}\n\n\tasync function read<\n\t\tTAbi extends Abi,\n\t\tTFunctionName extends ContractFunctionName<TAbi, 'pure' | 'view'>,\n\t\tTArgs extends ContractFunctionArgs<TAbi, 'pure' | 'view', TFunctionName> = ContractFunctionArgs<\n\t\t\tTAbi,\n\t\t\t'pure' | 'view',\n\t\t\tTFunctionName\n\t\t>\n\t>(\n\t\tdeployment: Deployment<TAbi>,\n\t\targs: ReadingArgs<TAbi, TFunctionName, TArgs>\n\t): Promise<DecodeFunctionResultReturnType<TAbi, TFunctionName>> {\n\t\tconst {account, ...viemArgs} = args;\n\t\tlet address: `0x${string}` | undefined;\n\t\tif (account) {\n\t\t\tif (account.startsWith('0x')) {\n\t\t\t\taddress = account as `0x${string}`;\n\t\t\t} else {\n\t\t\t\tif (env.namedAccounts) {\n\t\t\t\t\taddress = env.namedAccounts[account];\n\t\t\t\t\tif (!address) {\n\t\t\t\t\t\tthrow new Error(`no address for ${account}`);\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tthrow new Error(`no accounts setup, cannot get address for ${account}`);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tconst artifactToUse = deployment as unknown as Artifact<TAbi>;\n\t\tconst abi = artifactToUse.abi;\n\t\tconst calldata = encodeFunctionData<TAbi, TFunctionName>({\n\t\t\tabi,\n\t\t\tfunctionName: viemArgs.functionName,\n\t\t\targs: viemArgs.args,\n\t\t} as any);\n\n\t\tconst result: `0x${string}` = (await env.network.provider.request({\n\t\t\tmethod: 'eth_call',\n\t\t\tparams: [\n\t\t\t\t{\n\t\t\t\t\tto: deployment.address,\n\t\t\t\t\ttype: '0x2',\n\t\t\t\t\tfrom: address,\n\t\t\t\t\tchainId: `0x${env.network.chain.id.toString(16)}` as `0x${string}`,\n\t\t\t\t\tdata: calldata,\n\t\t\t\t\t// value: `0x${viemArgs.value?.toString(16)}` as `0x${string}`,\n\t\t\t\t},\n\t\t\t],\n\t\t})) as `0x${string}`;\n\n\t\tconst parsed = decodeFunctionResult<TAbi, TFunctionName>({\n\t\t\tabi,\n\t\t\tfunctionName: viemArgs.functionName,\n\t\t\tdata: result,\n\t\t\targs: viemArgs.args,\n\t\t} as any);\n\n\t\treturn parsed as DecodeFunctionResultReturnType<TAbi, TFunctionName>;\n\t}\n\n\tasync function readByName<\n\t\tTAbi extends Abi,\n\t\tTFunctionName extends ContractFunctionName<TAbi, 'pure' | 'view'>,\n\t\tTArgs extends ContractFunctionArgs<TAbi, 'pure' | 'view', TFunctionName> = ContractFunctionArgs<\n\t\t\tTAbi,\n\t\t\t'pure' | 'view',\n\t\t\tTFunctionName\n\t\t>\n\t>(\n\t\tname: string,\n\t\targs: ReadingArgs<TAbi, TFunctionName, TArgs>\n\t): Promise<DecodeFunctionResultReturnType<TAbi, TFunctionName>> {\n\t\tconst deployment = env.getOrNull<TAbi>(name);\n\t\tif (!deployment) {\n\t\t\tthrow new Error(`no deployment named ${name}`);\n\t\t}\n\n\t\treturn read(deployment, args);\n\t}\n\tasync function deploy<TAbi extends Abi>(\n\t\tname: string,\n\t\targs: DeploymentConstruction<TAbi>,\n\t\toptions?: DeployOptions\n\t): Promise<Deployment<TAbi> & {updated: boolean}> {\n\t\tconst skipIfAlreadyDeployed = options && 'skipIfAlreadyDeployed' in options && options.skipIfAlreadyDeployed;\n\t\tconst allwaysOverride = options && 'allwaysOverride' in options && options.allwaysOverride;\n\n\t\tif (allwaysOverride && skipIfAlreadyDeployed) {\n\t\t\tthrow new Error(`conflicting options: \"allwaysOverride\" and \"skipIfAlreadyDeployed\"`);\n\t\t}\n\n\t\tconst existingDeployment = env.getOrNull(name);\n\t\tif (existingDeployment && skipIfAlreadyDeployed) {\n\t\t\tlogger.info(`deployment for ${name} at ${existingDeployment.address}, skipIfAlreadyDeployed: true => we skip`);\n\t\t\treturn {...(existingDeployment as Deployment<TAbi>), updated: false};\n\t\t}\n\n\t\tconst {account, artifact, ...viemArgs} = args;\n\t\tlet address: `0x${string}`;\n\t\tif (account.startsWith('0x')) {\n\t\t\taddress = account as `0x${string}`;\n\t\t} else {\n\t\t\tif (env.namedAccounts) {\n\t\t\t\taddress = env.namedAccounts[account];\n\t\t\t\tif (!address) {\n\t\t\t\t\tthrow new Error(`no address for ${account}`);\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tthrow new Error(`no accounts setup, cannot get address for ${account}`);\n\t\t\t}\n\t\t}\n\n\t\t// TODO throw specific error if artifact not found\n\t\tconst artifactToUse = (typeof artifact === 'string' ? env.artifacts[artifact] : artifact) as Artifact<TAbi>;\n\n\t\tconst bytecode = linkLibraries(artifactToUse, options?.libraries);\n\n\t\tconst abi = artifactToUse.abi;\n\n\t\tconst argsToUse = {\n\t\t\t...viemArgs,\n\t\t\taccount,\n\t\t\tabi,\n\t\t\tbytecode,\n\t\t};\n\n\t\tconst calldata = encodeDeployData(argsToUse as any); // TODO any\n\t\tconst argsData = `0x${calldata.replace(bytecode, '')}` as `0x${string}`;\n\n\t\tif (existingDeployment) {\n\t\t\tlogger.info(`existing deployment for ${name} at ${existingDeployment.address}`);\n\t\t}\n\n\t\tif (existingDeployment && !allwaysOverride) {\n\t\t\tconst previousBytecode = existingDeployment.bytecode;\n\t\t\tconst previousArgsData = existingDeployment.argsData;\n\t\t\t// we assume cbor encoding of hash at the end\n\t\t\t// TODO option to remove it, can parse metadata but would rather avoid this here\n\t\t\tconst last2Bytes = previousBytecode.slice(-4);\n\t\t\tconst cborLength = parseInt(last2Bytes, 16);\n\t\t\tconst previousBytecodeWithoutCBOR = previousBytecode.slice(0, -cborLength * 2);\n\t\t\tconst newBytecodeWithoutCBOR = bytecode.slice(0, -cborLength * 2);\n\t\t\tif (previousBytecodeWithoutCBOR === newBytecodeWithoutCBOR && previousArgsData === argsData) {\n\t\t\t\treturn {...(existingDeployment as Deployment<TAbi>), updated: false};\n\t\t\t} else {\n\t\t\t\t// logger.info(`-------------- WITHOUT CBOR---------------------`);\n\t\t\t\t// logger.info(previousBytecodeWithoutCBOR);\n\t\t\t\t// logger.info(newBytecodeWithoutCBOR);\n\t\t\t\t// logger.info(`-----------------------------------`);\n\t\t\t\t// logger.info(`-------------- ARGS DATA ---------------------`);\n\t\t\t\t// logger.info(previousArgsData);\n\t\t\t\t// logger.info(argsData);\n\t\t\t\t// logger.info(`-----------------------------------`);\n\t\t\t}\n\t\t}\n\n\t\tconst partialDeployment: PartialDeployment<TAbi> = {\n\t\t\t...artifactToUse,\n\t\t\targsData,\n\t\t\tlinkedData: options?.linkedData,\n\t\t};\n\n\t\tconst signer = env.addressSigners[address];\n\n\t\tconst chainId = `0x${env.network.chain.id.toString(16)}` as `0x${string}`;\n\t\tconst maxFeePerGas = viemArgs.maxFeePerGas && (`0x${viemArgs.maxFeePerGas.toString(16)}` as `0x${string}`);\n\t\tconst maxPriorityFeePerGas =\n\t\t\tviemArgs.maxPriorityFeePerGas && (`0x${viemArgs.maxPriorityFeePerGas.toString(16)}` as `0x${string}`);\n\n\t\tconst params: [EIP1193TransactionData] = [\n\t\t\t{\n\t\t\t\ttype: '0x2',\n\t\t\t\tfrom: address,\n\t\t\t\tchainId,\n\t\t\t\tdata: calldata,\n\t\t\t\tgas: viemArgs.gas && (`0x${viemArgs.gas.toString(16)}` as `0x${string}`),\n\t\t\t\tmaxFeePerGas,\n\t\t\t\tmaxPriorityFeePerGas,\n\t\t\t\t// gasPrice: viemArgs.gasPrice && `0x${viemArgs.gasPrice.toString(16)}` as `0x${string}`,\n\t\t\t\t// value: `0x${viemArgs.value?.toString(16)}` as `0x${string}`,\n\t\t\t\t// nonce: viemArgs.nonce && (`0x${viemArgs.nonce.toString(16)}` as `0x${string}`),\n\t\t\t},\n\t\t];\n\n\t\tlet expectedAddress: `0x${string}` | undefined = undefined;\n\t\tif (options?.deterministic) {\n\t\t\t// TODO make these configurable\n\t\t\tconst deterministicFactoryAddress = `0x4e59b44847b379578588920ca78fbf26c0b4956c`;\n\t\t\tconst deterministicFactoryDeployerAddress = `0x3fab184622dc19b6109349b94811493bf2a45362`;\n\t\t\tconst factoryDeploymentData = `0xf8a58085174876e800830186a08080b853604580600e600039806000f350fe7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe03601600081602082378035828234f58015156039578182fd5b8082525050506014600cf31ba02222222222222222222222222222222222222222222222222222222222222222a02222222222222222222222222222222222222222222222222222222222222222`;\n\n\t\t\tconst code = await env.network.provider.request({\n\t\t\t\tmethod: 'eth_getCode',\n\t\t\t\tparams: [deterministicFactoryAddress, 'latest'],\n\t\t\t});\n\t\t\tif (code === '0x') {\n\t\t\t\tconst balanceHexString = await env.network.provider.request({\n\t\t\t\t\tmethod: 'eth_getBalance',\n\t\t\t\t\tparams: [deterministicFactoryDeployerAddress, 'latest'],\n\t\t\t\t});\n\t\t\t\tconst balance = BigInt(balanceHexString);\n\t\t\t\tif (balance < 10000000000000000n) {\n\t\t\t\t\tconst need = 10000000000000000n - balance;\n\t\t\t\t\tconst balanceToSend = `0x${need.toString(16)}` as `0x${string}`;\n\t\t\t\t\tconst txHash = await broadcastTransaction(env, signer, [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\ttype: '0x2',\n\t\t\t\t\t\t\tchainId,\n\t\t\t\t\t\t\tfrom: address,\n\t\t\t\t\t\t\tto: deterministicFactoryDeployerAddress,\n\t\t\t\t\t\t\tvalue: balanceToSend,\n\t\t\t\t\t\t\tgas: `0x${BigInt(21000).toString(16)}`,\n\t\t\t\t\t\t\tmaxFeePerGas,\n\t\t\t\t\t\t\tmaxPriorityFeePerGas,\n\t\t\t\t\t\t},\n\t\t\t\t\t]);\n\t\t\t\t\tawait env.savePendingExecution({\n\t\t\t\t\t\ttype: 'execution', // TODO different type ?\n\t\t\t\t\t\ttransaction: {hash: txHash, origin: address},\n\t\t\t\t\t});\n\t\t\t\t}\n\n\t\t\t\tconst txHash = await env.network.provider.request({\n\t\t\t\t\tmethod: 'eth_sendRawTransaction',\n\t\t\t\t\tparams: [factoryDeploymentData],\n\t\t\t\t});\n\t\t\t\tawait env.savePendingExecution({\n\t\t\t\t\ttype: 'execution', // TODO different type ?\n\t\t\t\t\ttransaction: {hash: txHash, origin: address},\n\t\t\t\t});\n\t\t\t}\n\n\t\t\t// prepending the salt\n\t\t\tconst salt = (\n\t\t\t\ttypeof options.deterministic === 'string'\n\t\t\t\t\t? `0x${options.deterministic.slice(2).padStart(64, '0')}`\n\t\t\t\t\t: '0x0000000000000000000000000000000000000000000000000000000000000000'\n\t\t\t) as `0x${string}`;\n\n\t\t\tconst bytecode = params[0].data || '0x';\n\n\t\t\texpectedAddress = ('0x' +\n\t\t\t\tkeccak256(`0xff${deterministicFactoryAddress.slice(2)}${salt.slice(2)}${keccak256(bytecode).slice(2)}`).slice(\n\t\t\t\t\t-40\n\t\t\t\t)) as `0x${string}`;\n\n\t\t\tconst codeAlreadyDeployed = await env.network.provider.request({\n\t\t\t\tmethod: 'eth_getCode',\n\t\t\t\tparams: [expectedAddress, 'latest'],\n\t\t\t});\n\n\t\t\tif (codeAlreadyDeployed !== '0x') {\n\t\t\t\tenv.showMessage(`contract was already deterministically deployed at ${expectedAddress}`);\n\t\t\t\tconst deployment = await env.save(name, {\n\t\t\t\t\taddress: expectedAddress,\n\t\t\t\t\t...partialDeployment,\n\t\t\t\t});\n\t\t\t\treturn {...(deployment as Deployment<TAbi>), updated: true};\n\t\t\t}\n\n\t\t\tparams[0].data = (salt + (bytecode.slice(2) || '')) as `0x${string}`;\n\t\t\tparams[0].to = deterministicFactoryAddress;\n\t\t}\n\n\t\tconst txHash = await broadcastTransaction(env, signer, params);\n\n\t\tconst pendingDeployment: PendingDeployment<TAbi> = {\n\t\t\ttype: 'deployment',\n\t\t\texpectedAddress,\n\t\t\tpartialDeployment,\n\t\t\ttransaction: {hash: txHash, origin: address},\n\t\t\tname,\n\t\t\t// TODO we should have the nonce, except for wallet like metamask where it is not usre you get the nonce you start with\n\t\t};\n\t\tconst deployment = await env.savePendingDeployment(pendingDeployment);\n\t\treturn {...(deployment as Deployment<TAbi>), updated: true};\n\t}\n\n\tenv.deploy = deploy;\n\tenv.execute = execute;\n\tenv.executeByName = executeByName;\n\tenv.read = read;\n\tenv.readByName = readByName;\n\treturn env;\n});\n"],"names":["logs","keccak256","encodePacked","extendEnvironment","encodeFunctionData","decodeFunctionResult","encodeDeployData"],"mappings":";;;;;;AAUA,MAAM,MAAM,GAAGA,cAAI,CAAC,gBAAgB,CAAC,CAAC;AACtC,eAAe,oBAAoB,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE;AACzD,EAAE,IAAI,MAAM,CAAC,IAAI,KAAK,QAAQ,IAAI,MAAM,CAAC,IAAI,KAAK,QAAQ,EAAE;AAC5D,IAAI,OAAO,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC;AACjC,MAAM,MAAM,EAAE,qBAAqB;AACnC,MAAM,MAAM;AACZ,KAAK,CAAC,CAAC;AACP,GAAG,MAAM;AACT,IAAI,MAAM,KAAK,GAAG,MAAM,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC;AAC9C,MAAM,MAAM,EAAE,qBAAqB;AACnC,MAAM,MAAM;AACZ,KAAK,CAAC,CAAC;AACP,IAAI,OAAO,GAAG,CAAC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAC;AACxC,MAAM,MAAM,EAAE,wBAAwB;AACtC,MAAM,MAAM,EAAE,CAAC,KAAK,CAAC;AACrB,KAAK,CAAC,CAAC;AACP,GAAG;AACH,CAAC;AACD,SAAS,cAAc,CAAC,QAAQ,EAAE,WAAW,EAAE,cAAc,EAAE;AAC/D,EAAE,MAAM,OAAO,GAAG,cAAc,CAAC,OAAO,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;AACnD,EAAE,IAAI,kBAAkB,CAAC;AACzB,EAAE,IAAI,WAAW,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,WAAW,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE;AAChE,IAAI,kBAAkB,GAAG,WAAW,CAAC,KAAK,CAAC,CAAC,EAAE,WAAW,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;AACtE,GAAG,MAAM;AACT,IAAI,kBAAkB,GAAGC,cAAS,CAACC,iBAAY,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;AACzF,GAAG;AACH,EAAE,MAAM,OAAO,GAAG,IAAI,MAAM,CAAC,CAAC,KAAK,EAAE,kBAAkB,CAAC,KAAK,CAAC,EAAE,GAAG,CAAC,CAAC;AACrE,EAAE,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE;AAC/B,IAAI,MAAM,IAAI,KAAK,CAAC,CAAC,YAAY,EAAE,WAAW,CAAC,GAAG,EAAE,kBAAkB,CAAC;AACvE;AACA,CAAC,EAAE,QAAQ,CAAC;AACZ;AACA,CAAC,CAAC,CAAC;AACH,GAAG;AACH,EAAE,OAAO,QAAQ,CAAC,OAAO,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;AAC5C,CAAC;AACD,SAAS,gBAAgB,CAAC,QAAQ,EAAE,SAAS,EAAE;AAC/C,EAAE,KAAK,MAAM,OAAO,IAAI,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE;AAChD,IAAI,MAAM,UAAU,GAAG,SAAS,CAAC,OAAO,CAAC,CAAC;AAC1C,IAAI,QAAQ,GAAG,cAAc,CAAC,QAAQ,EAAE,OAAO,EAAE,UAAU,CAAC,CAAC;AAC7D,GAAG;AACH,EAAE,OAAO,QAAQ,CAAC;AAClB,CAAC;AACD,SAAS,aAAa,CAAC,QAAQ,EAAE,SAAS,EAAE;AAC5C,EAAE,IAAI,QAAQ,GAAG,QAAQ,CAAC,QAAQ,CAAC;AACnC,EAAE,IAAI,SAAS,EAAE;AACjB,IAAI,IAAI,QAAQ,CAAC,cAAc,EAAE;AACjC,MAAM,KAAK,MAAM,CAAC,QAAQ,EAAE,cAAc,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAC,EAAE;AACxF,QAAQ,KAAK,MAAM,CAAC,OAAO,EAAE,MAAM,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,cAAc,CAAC,EAAE;AACxE,UAAU,MAAM,IAAI,GAAG,SAAS,CAAC,OAAO,CAAC,CAAC;AAC1C,UAAU,IAAI,IAAI,KAAK,KAAK,CAAC,EAAE;AAC/B,YAAY,SAAS;AACrB,WAAW;AACX,UAAU,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE;AACtC,YAAY,QAAQ,GAAG,QAAQ,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,KAAK,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,GAAG,QAAQ,CAAC,SAAS,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,GAAG,KAAK,CAAC,MAAM,IAAI,CAAC,CAAC,CAAC;AACjJ,WAAW;AACX,SAAS;AACT,OAAO;AACP,KAAK,MAAM;AACX,MAAM,QAAQ,GAAG,gBAAgB,CAAC,QAAQ,EAAE,SAAS,CAAC,CAAC;AACvD,KAAK;AACL,GAAG;AACH,EAAE,OAAO,QAAQ,CAAC;AAClB,CAAC;AACDC,yBAAiB,CAAC,CAAC,GAAG,KAAK;AAC3B,EAAE,eAAe,OAAO,CAAC,UAAU,EAAE,IAAI,EAAE;AAC3C,IAAI,MAAM,EAAE,OAAO,EAAE,GAAG,QAAQ,EAAE,GAAG,IAAI,CAAC;AAC1C,IAAI,IAAI,OAAO,CAAC;AAChB,IAAI,IAAI,OAAO,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE;AAClC,MAAM,OAAO,GAAG,OAAO,CAAC;AACxB,KAAK,MAAM;AACX,MAAM,IAAI,GAAG,CAAC,aAAa,EAAE;AAC7B,QAAQ,OAAO,GAAG,GAAG,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC;AAC7C,QAAQ,IAAI,CAAC,OAAO,EAAE;AACtB,UAAU,MAAM,IAAI,KAAK,CAAC,CAAC,eAAe,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC;AACvD,SAAS;AACT,OAAO,MAAM;AACb,QAAQ,MAAM,IAAI,KAAK,CAAC,CAAC,0CAA0C,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC;AAChF,OAAO;AACP,KAAK;AACL,IAAI,MAAM,aAAa,GAAG,UAAU,CAAC;AACrC,IAAI,MAAM,GAAG,GAAG,aAAa,CAAC,GAAG,CAAC;AAClC,IAAI,MAAM,QAAQ,GAAGC,uBAAkB,CAAC;AACxC,MAAM,GAAG;AACT,MAAM,YAAY,EAAE,QAAQ,CAAC,YAAY;AACzC,MAAM,IAAI,EAAE,QAAQ,CAAC,IAAI;AACzB,KAAK,CAAC,CAAC;AACP,IAAI,MAAM,MAAM,GAAG,GAAG,CAAC,cAAc,CAAC,OAAO,CAAC,CAAC;AAC/C,IAAI,MAAM,OAAO,GAAG;AACpB,MAAM,EAAE,EAAE,UAAU,CAAC,OAAO;AAC5B,MAAM,IAAI,EAAE,KAAK;AACjB,MAAM,IAAI,EAAE,OAAO;AACnB,MAAM,OAAO,EAAE,CAAC,EAAE,EAAE,GAAG,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,CAAC;AACvD,MAAM,IAAI,EAAE,QAAQ;AACpB,MAAM,GAAG,EAAE,QAAQ,CAAC,GAAG,IAAI,CAAC,EAAE,EAAE,QAAQ,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,CAAC;AAC3D;AACA,MAAM,YAAY,EAAE,QAAQ,CAAC,YAAY,IAAI,CAAC,EAAE,EAAE,QAAQ,CAAC,YAAY,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,CAAC;AACtF,MAAM,oBAAoB,EAAE,QAAQ,CAAC,oBAAoB,IAAI,CAAC,EAAE,EAAE,QAAQ,CAAC,oBAAoB,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,CAAC;AAC9G;AACA,KAAK,CAAC;AACN,IAAI,IAAI,QAAQ,CAAC,KAAK,EAAE;AACxB,MAAM,OAAO,CAAC,KAAK,GAAG,CAAC,EAAE,EAAE,QAAQ,CAAC,KAAK,EAAE,QAAQ,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;AAC1D,KAAK;AACL,IAAI,IAAI,MAAM,CAAC;AACf,IAAI,IAAI,MAAM,CAAC,IAAI,KAAK,QAAQ,IAAI,MAAM,CAAC,IAAI,KAAK,QAAQ,EAAE;AAC9D,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC;AAC3C,QAAQ,MAAM,EAAE,qBAAqB;AACrC,QAAQ,MAAM,EAAE,CAAC,OAAO,CAAC;AACzB,OAAO,CAAC,CAAC;AACT,KAAK,MAAM;AACX,MAAM,MAAM,KAAK,GAAG,MAAM,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC;AAChD,QAAQ,MAAM,EAAE,qBAAqB;AACrC,QAAQ,MAAM,EAAE,CAAC,OAAO,CAAC;AACzB,OAAO,CAAC,CAAC;AACT,MAAM,MAAM,GAAG,MAAM,GAAG,CAAC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAC;AAClD,QAAQ,MAAM,EAAE,wBAAwB;AACxC,QAAQ,MAAM,EAAE,CAAC,KAAK,CAAC;AACvB,OAAO,CAAC,CAAC;AACT,KAAK;AACL,IAAI,MAAM,gBAAgB,GAAG;AAC7B,MAAM,IAAI,EAAE,WAAW;AACvB,MAAM,WAAW,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE;AACpD;AACA;AACA,KAAK,CAAC;AACN,IAAI,MAAM,GAAG,CAAC,oBAAoB,CAAC,gBAAgB,CAAC,CAAC;AACrD,IAAI,OAAO,MAAM,CAAC;AAClB,GAAG;AACH,EAAE,eAAe,aAAa,CAAC,IAAI,EAAE,IAAI,EAAE;AAC3C,IAAI,MAAM,UAAU,GAAG,GAAG,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;AAC3C,IAAI,IAAI,CAAC,UAAU,EAAE;AACrB,MAAM,MAAM,IAAI,KAAK,CAAC,CAAC,oBAAoB,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC;AACrD,KAAK;AACL,IAAI,OAAO,OAAO,CAAC,UAAU,EAAE,IAAI,CAAC,CAAC;AACrC,GAAG;AACH,EAAE,eAAe,IAAI,CAAC,UAAU,EAAE,IAAI,EAAE;AACxC,IAAI,MAAM,EAAE,OAAO,EAAE,GAAG,QAAQ,EAAE,GAAG,IAAI,CAAC;AAC1C,IAAI,IAAI,OAAO,CAAC;AAChB,IAAI,IAAI,OAAO,EAAE;AACjB,MAAM,IAAI,OAAO,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE;AACpC,QAAQ,OAAO,GAAG,OAAO,CAAC;AAC1B,OAAO,MAAM;AACb,QAAQ,IAAI,GAAG,CAAC,aAAa,EAAE;AAC/B,UAAU,OAAO,GAAG,GAAG,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC;AAC/C,UAAU,IAAI,CAAC,OAAO,EAAE;AACxB,YAAY,MAAM,IAAI,KAAK,CAAC,CAAC,eAAe,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC;AACzD,WAAW;AACX,SAAS,MAAM;AACf,UAAU,MAAM,IAAI,KAAK,CAAC,CAAC,0CAA0C,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC;AAClF,SAAS;AACT,OAAO;AACP,KAAK;AACL,IAAI,MAAM,aAAa,GAAG,UAAU,CAAC;AACrC,IAAI,MAAM,GAAG,GAAG,aAAa,CAAC,GAAG,CAAC;AAClC,IAAI,MAAM,QAAQ,GAAGA,uBAAkB,CAAC;AACxC,MAAM,GAAG;AACT,MAAM,YAAY,EAAE,QAAQ,CAAC,YAAY;AACzC,MAAM,IAAI,EAAE,QAAQ,CAAC,IAAI;AACzB,KAAK,CAAC,CAAC;AACP,IAAI,MAAM,MAAM,GAAG,MAAM,GAAG,CAAC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAC;AACtD,MAAM,MAAM,EAAE,UAAU;AACxB,MAAM,MAAM,EAAE;AACd,QAAQ;AACR,UAAU,EAAE,EAAE,UAAU,CAAC,OAAO;AAChC,UAAU,IAAI,EAAE,KAAK;AACrB,UAAU,IAAI,EAAE,OAAO;AACvB,UAAU,OAAO,EAAE,CAAC,EAAE,EAAE,GAAG,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,CAAC;AAC3D,UAAU,IAAI,EAAE,QAAQ;AACxB;AACA,SAAS;AACT,OAAO;AACP,KAAK,CAAC,CAAC;AACP,IAAI,MAAM,MAAM,GAAGC,yBAAoB,CAAC;AACxC,MAAM,GAAG;AACT,MAAM,YAAY,EAAE,QAAQ,CAAC,YAAY;AACzC,MAAM,IAAI,EAAE,MAAM;AAClB,MAAM,IAAI,EAAE,QAAQ,CAAC,IAAI;AACzB,KAAK,CAAC,CAAC;AACP,IAAI,OAAO,MAAM,CAAC;AAClB,GAAG;AACH,EAAE,eAAe,UAAU,CAAC,IAAI,EAAE,IAAI,EAAE;AACxC,IAAI,MAAM,UAAU,GAAG,GAAG,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;AAC3C,IAAI,IAAI,CAAC,UAAU,EAAE;AACrB,MAAM,MAAM,IAAI,KAAK,CAAC,CAAC,oBAAoB,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC;AACrD,KAAK;AACL,IAAI,OAAO,IAAI,CAAC,UAAU,EAAE,IAAI,CAAC,CAAC;AAClC,GAAG;AACH,EAAE,eAAe,MAAM,CAAC,IAAI,EAAE,IAAI,EAAE,OAAO,EAAE;AAC7C,IAAI,MAAM,qBAAqB,GAAG,OAAO,IAAI,uBAAuB,IAAI,OAAO,IAAI,OAAO,CAAC,qBAAqB,CAAC;AACjH,IAAI,MAAM,eAAe,GAAG,OAAO,IAAI,iBAAiB,IAAI,OAAO,IAAI,OAAO,CAAC,eAAe,CAAC;AAC/F,IAAI,IAAI,eAAe,IAAI,qBAAqB,EAAE;AAClD,MAAM,MAAM,IAAI,KAAK,CAAC,CAAC,kEAAkE,CAAC,CAAC,CAAC;AAC5F,KAAK;AACL,IAAI,MAAM,kBAAkB,GAAG,GAAG,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;AACnD,IAAI,IAAI,kBAAkB,IAAI,qBAAqB,EAAE;AACrD,MAAM,MAAM,CAAC,IAAI,CAAC,CAAC,eAAe,EAAE,IAAI,CAAC,IAAI,EAAE,kBAAkB,CAAC,OAAO,CAAC,wCAAwC,CAAC,CAAC,CAAC;AACrH,MAAM,OAAO,EAAE,GAAG,kBAAkB,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC;AACvD,KAAK;AACL,IAAI,MAAM,EAAE,OAAO,EAAE,QAAQ,EAAE,GAAG,QAAQ,EAAE,GAAG,IAAI,CAAC;AACpD,IAAI,IAAI,OAAO,CAAC;AAChB,IAAI,IAAI,OAAO,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE;AAClC,MAAM,OAAO,GAAG,OAAO,CAAC;AACxB,KAAK,MAAM;AACX,MAAM,IAAI,GAAG,CAAC,aAAa,EAAE;AAC7B,QAAQ,OAAO,GAAG,GAAG,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC;AAC7C,QAAQ,IAAI,CAAC,OAAO,EAAE;AACtB,UAAU,MAAM,IAAI,KAAK,CAAC,CAAC,eAAe,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC;AACvD,SAAS;AACT,OAAO,MAAM;AACb,QAAQ,MAAM,IAAI,KAAK,CAAC,CAAC,0CAA0C,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC;AAChF,OAAO;AACP,KAAK;AACL,IAAI,MAAM,aAAa,GAAG,OAAO,QAAQ,KAAK,QAAQ,GAAG,GAAG,CAAC,SAAS,CAAC,QAAQ,CAAC,GAAG,QAAQ,CAAC;AAC5F,IAAI,MAAM,QAAQ,GAAG,aAAa,CAAC,aAAa,EAAE,OAAO,EAAE,SAAS,CAAC,CAAC;AACtE,IAAI,MAAM,GAAG,GAAG,aAAa,CAAC,GAAG,CAAC;AAClC,IAAI,MAAM,SAAS,GAAG;AACtB,MAAM,GAAG,QAAQ;AACjB,MAAM,OAAO;AACb,MAAM,GAAG;AACT,MAAM,QAAQ;AACd,KAAK,CAAC;AACN,IAAI,MAAM,QAAQ,GAAGC,qBAAgB,CAAC,SAAS,CAAC,CAAC;AACjD,IAAI,MAAM,QAAQ,GAAG,CAAC,EAAE,EAAE,QAAQ,CAAC,OAAO,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC;AAC3D,IAAI,IAAI,kBAAkB,EAAE;AAC5B,MAAM,MAAM,CAAC,IAAI,CAAC,CAAC,wBAAwB,EAAE,IAAI,CAAC,IAAI,EAAE,kBAAkB,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;AACtF,KAAK;AACL,IAAI,IAAI,kBAAkB,IAAI,CAAC,eAAe,EAAE;AAChD,MAAM,MAAM,gBAAgB,GAAG,kBAAkB,CAAC,QAAQ,CAAC;AAC3D,MAAM,MAAM,gBAAgB,GAAG,kBAAkB,CAAC,QAAQ,CAAC;AAC3D,MAAM,MAAM,UAAU,GAAG,gBAAgB,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;AACpD,MAAM,MAAM,UAAU,GAAG,QAAQ,CAAC,UAAU,EAAE,EAAE,CAAC,CAAC;AAClD,MAAM,MAAM,2BAA2B,GAAG,gBAAgB,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,UAAU,GAAG,CAAC,CAAC,CAAC;AACrF,MAAM,MAAM,sBAAsB,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,UAAU,GAAG,CAAC,CAAC,CAAC;AACxE,MAAM,IAAI,2BAA2B,KAAK,sBAAsB,IAAI,gBAAgB,KAAK,QAAQ,EAAE;AACnG,QAAQ,OAAO,EAAE,GAAG,kBAAkB,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC;AACzD,OACO;AACP,KAAK;AACL,IAAI,MAAM,iBAAiB,GAAG;AAC9B,MAAM,GAAG,aAAa;AACtB,MAAM,QAAQ;AACd,MAAM,UAAU,EAAE,OAAO,EAAE,UAAU;AACrC,KAAK,CAAC;AACN,IAAI,MAAM,MAAM,GAAG,GAAG,CAAC,cAAc,CAAC,OAAO,CAAC,CAAC;AAC/C,IAAI,MAAM,OAAO,GAAG,CAAC,EAAE,EAAE,GAAG,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;AAC7D,IAAI,MAAM,YAAY,GAAG,QAAQ,CAAC,YAAY,IAAI,CAAC,EAAE,EAAE,QAAQ,CAAC,YAAY,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;AAC5F,IAAI,MAAM,oBAAoB,GAAG,QAAQ,CAAC,oBAAoB,IAAI,CAAC,EAAE,EAAE,QAAQ,CAAC,oBAAoB,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;AACpH,IAAI,MAAM,MAAM,GAAG;AACnB,MAAM;AACN,QAAQ,IAAI,EAAE,KAAK;AACnB,QAAQ,IAAI,EAAE,OAAO;AACrB,QAAQ,OAAO;AACf,QAAQ,IAAI,EAAE,QAAQ;AACtB,QAAQ,GAAG,EAAE,QAAQ,CAAC,GAAG,IAAI,CAAC,EAAE,EAAE,QAAQ,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,CAAC;AAC7D,QAAQ,YAAY;AACpB,QAAQ,oBAAoB;AAC5B;AACA;AACA;AACA,OAAO;AACP,KAAK,CAAC;AACN,IAAI,IAAI,eAAe,GAAG,KAAK,CAAC,CAAC;AACjC,IAAI,IAAI,OAAO,EAAE,aAAa,EAAE;AAChC,MAAM,MAAM,2BAA2B,GAAG,CAAC,0CAA0C,CAAC,CAAC;AACvF,MAAM,MAAM,mCAAmC,GAAG,CAAC,0CAA0C,CAAC,CAAC;AAC/F,MAAM,MAAM,qBAAqB,GAAG,CAAC,gVAAgV,CAAC,CAAC;AACvX,MAAM,MAAM,IAAI,GAAG,MAAM,GAAG,CAAC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAC;AACtD,QAAQ,MAAM,EAAE,aAAa;AAC7B,QAAQ,MAAM,EAAE,CAAC,2BAA2B,EAAE,QAAQ,CAAC;AACvD,OAAO,CAAC,CAAC;AACT,MAAM,IAAI,IAAI,KAAK,IAAI,EAAE;AACzB,QAAQ,MAAM,gBAAgB,GAAG,MAAM,GAAG,CAAC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAC;AACpE,UAAU,MAAM,EAAE,gBAAgB;AAClC,UAAU,MAAM,EAAE,CAAC,mCAAmC,EAAE,QAAQ,CAAC;AACjE,SAAS,CAAC,CAAC;AACX,QAAQ,MAAM,OAAO,GAAG,MAAM,CAAC,gBAAgB,CAAC,CAAC;AACjD,QAAQ,IAAI,OAAO,GAAG,kBAAkB,EAAE;AAC1C,UAAU,MAAM,IAAI,GAAG,kBAAkB,GAAG,OAAO,CAAC;AACpD,UAAU,MAAM,aAAa,GAAG,CAAC,EAAE,EAAE,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;AACzD,UAAU,MAAM,OAAO,GAAG,MAAM,oBAAoB,CAAC,GAAG,EAAE,MAAM,EAAE;AAClE,YAAY;AACZ,cAAc,IAAI,EAAE,KAAK;AACzB,cAAc,OAAO;AACrB,cAAc,IAAI,EAAE,OAAO;AAC3B,cAAc,EAAE,EAAE,mCAAmC;AACrD,cAAc,KAAK,EAAE,aAAa;AAClC,cAAc,GAAG,EAAE,CAAC,EAAE,EAAE,MAAM,CAAC,IAAI,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,CAAC;AACnD,cAAc,YAAY;AAC1B,cAAc,oBAAoB;AAClC,aAAa;AACb,WAAW,CAAC,CAAC;AACb,UAAU,MAAM,GAAG,CAAC,oBAAoB,CAAC;AACzC,YAAY,IAAI,EAAE,WAAW;AAC7B;AACA,YAAY,WAAW,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE;AAC3D,WAAW,CAAC,CAAC;AACb,SAAS;AACT,QAAQ,MAAM,OAAO,GAAG,MAAM,GAAG,CAAC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAC;AAC3D,UAAU,MAAM,EAAE,wBAAwB;AAC1C,UAAU,MAAM,EAAE,CAAC,qBAAqB,CAAC;AACzC,SAAS,CAAC,CAAC;AACX,QAAQ,MAAM,GAAG,CAAC,oBAAoB,CAAC;AACvC,UAAU,IAAI,EAAE,WAAW;AAC3B;AACA,UAAU,WAAW,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE;AACzD,SAAS,CAAC,CAAC;AACX,OAAO;AACP,MAAM,MAAM,IAAI,GAAG,OAAO,OAAO,CAAC,aAAa,KAAK,QAAQ,GAAG,CAAC,EAAE,EAAE,OAAO,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE,EAAE,GAAG,CAAC,CAAC,CAAC,GAAG,oEAAoE,CAAC;AAC9L,MAAM,MAAM,SAAS,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC,IAAI,IAAI,IAAI,CAAC;AAC/C,MAAM,eAAe,GAAG,IAAI,GAAGL,cAAS,CAAC,CAAC,IAAI,EAAE,2BAA2B,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,EAAEA,cAAS,CAAC,SAAS,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK;AAC7I,QAAQ,CAAC,EAAE;AACX,OAAO,CAAC;AACR,MAAM,MAAM,mBAAmB,GAAG,MAAM,GAAG,CAAC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAC;AACrE,QAAQ,MAAM,EAAE,aAAa;AAC7B,QAAQ,MAAM,EAAE,CAAC,eAAe,EAAE,QAAQ,CAAC;AAC3C,OAAO,CAAC,CAAC;AACT,MAAM,IAAI,mBAAmB,KAAK,IAAI,EAAE;AACxC,QAAQ,GAAG,CAAC,WAAW,CAAC,CAAC,mDAAmD,EAAE,eAAe,CAAC,CAAC,CAAC,CAAC;AACjG,QAAQ,MAAM,WAAW,GAAG,MAAM,GAAG,CAAC,IAAI,CAAC,IAAI,EAAE;AACjD,UAAU,OAAO,EAAE,eAAe;AAClC,UAAU,GAAG,iBAAiB;AAC9B,SAAS,CAAC,CAAC;AACX,QAAQ,OAAO,EAAE,GAAG,WAAW,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;AACjD,OAAO;AACP,MAAM,MAAM,CAAC,CAAC,CAAC,CAAC,IAAI,GAAG,IAAI,IAAI,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;AACzD,MAAM,MAAM,CAAC,CAAC,CAAC,CAAC,EAAE,GAAG,2BAA2B,CAAC;AACjD,KAAK;AACL,IAAI,MAAM,MAAM,GAAG,MAAM,oBAAoB,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;AACnE,IAAI,MAAM,iBAAiB,GAAG;AAC9B,MAAM,IAAI,EAAE,YAAY;AACxB,MAAM,eAAe;AACrB,MAAM,iBAAiB;AACvB,MAAM,WAAW,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE;AACpD,MAAM,IAAI;AACV;AACA,KAAK,CAAC;AACN,IAAI,MAAM,UAAU,GAAG,MAAM,GAAG,CAAC,qBAAqB,CAAC,iBAAiB,CAAC,CAAC;AAC1E,IAAI,OAAO,EAAE,GAAG,UAAU,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;AAC5C,GAAG;AACH,EAAE,GAAG,CAAC,MAAM,GAAG,MAAM,CAAC;AACtB,EAAE,GAAG,CAAC,OAAO,GAAG,OAAO,CAAC;AACxB,EAAE,GAAG,CAAC,aAAa,GAAG,aAAa,CAAC;AACpC,EAAE,GAAG,CAAC,IAAI,GAAG,IAAI,CAAC;AAClB,EAAE,GAAG,CAAC,UAAU,GAAG,UAAU,CAAC;AAC9B,EAAE,OAAO,GAAG,CAAC;AACb,CAAC,CAAC;;"}
|
package/dist/index.d.ts
CHANGED
|
@@ -1,39 +1,51 @@
|
|
|
1
1
|
import { DeploymentConstruction, Deployment } from 'rocketh';
|
|
2
|
-
import { Chain, ContractFunctionName, ContractFunctionArgs, DecodeFunctionResultReturnType, WriteContractParameters, ReadContractParameters } from 'viem';
|
|
2
|
+
import { Chain, ContractFunctionName, ContractFunctionArgs, DecodeFunctionResultReturnType, WriteContractParameters, ReadContractParameters, Address } from 'viem';
|
|
3
3
|
|
|
4
|
-
|
|
4
|
+
interface Register {
|
|
5
|
+
}
|
|
5
6
|
type ResolvedRegister = {
|
|
6
7
|
/**
|
|
7
8
|
* TypeScript type to use for `address` values
|
|
8
9
|
* @default `0x${string}`
|
|
9
10
|
*/
|
|
10
|
-
|
|
11
|
+
addressType: Register extends {
|
|
12
|
+
addressType: infer type;
|
|
13
|
+
} ? type : Register extends {
|
|
11
14
|
AddressType: infer type;
|
|
12
|
-
} ? type : DefaultRegister['
|
|
15
|
+
} ? type : DefaultRegister['addressType'];
|
|
13
16
|
/**
|
|
14
17
|
* TypeScript type to use for `int<M>` and `uint<M>` values, where `M > 48`
|
|
15
18
|
* @default bigint
|
|
16
19
|
*/
|
|
17
|
-
|
|
20
|
+
bigIntType: Register extends {
|
|
21
|
+
bigIntType: infer type;
|
|
22
|
+
} ? type : Register extends {
|
|
18
23
|
BigIntType: infer type;
|
|
19
|
-
} ? type : DefaultRegister['
|
|
24
|
+
} ? type : DefaultRegister['bigIntType'];
|
|
20
25
|
/**
|
|
21
26
|
* TypeScript type to use for `bytes` values
|
|
22
27
|
* @default { inputs: `0x${string}`; outputs: `0x${string}`; }
|
|
23
28
|
*/
|
|
24
|
-
|
|
29
|
+
bytesType: Register extends {
|
|
30
|
+
bytesType: infer type extends {
|
|
31
|
+
inputs: unknown;
|
|
32
|
+
outputs: unknown;
|
|
33
|
+
};
|
|
34
|
+
} ? type : Register extends {
|
|
25
35
|
BytesType: infer type extends {
|
|
26
36
|
inputs: unknown;
|
|
27
37
|
outputs: unknown;
|
|
28
38
|
};
|
|
29
|
-
} ? type : DefaultRegister['
|
|
39
|
+
} ? type : DefaultRegister['bytesType'];
|
|
30
40
|
/**
|
|
31
41
|
* TypeScript type to use for `int<M>` and `uint<M>` values, where `M <= 48`
|
|
32
42
|
* @default number
|
|
33
43
|
*/
|
|
34
|
-
|
|
44
|
+
intType: Register extends {
|
|
45
|
+
intType: infer type;
|
|
46
|
+
} ? type : Register extends {
|
|
35
47
|
IntType: infer type;
|
|
36
|
-
} ? type : DefaultRegister['
|
|
48
|
+
} ? type : DefaultRegister['intType'];
|
|
37
49
|
/**
|
|
38
50
|
* Maximum depth for nested array types (e.g. string[][])
|
|
39
51
|
*
|
|
@@ -42,23 +54,29 @@ type ResolvedRegister = {
|
|
|
42
54
|
*
|
|
43
55
|
* @default false
|
|
44
56
|
*/
|
|
45
|
-
|
|
57
|
+
arrayMaxDepth: Register extends {
|
|
58
|
+
arrayMaxDepth: infer type extends number | false;
|
|
59
|
+
} ? type : Register extends {
|
|
46
60
|
ArrayMaxDepth: infer type extends number | false;
|
|
47
|
-
} ? type : DefaultRegister['
|
|
61
|
+
} ? type : DefaultRegister['arrayMaxDepth'];
|
|
48
62
|
/**
|
|
49
63
|
* Lower bound for fixed array length
|
|
50
64
|
* @default 1
|
|
51
65
|
*/
|
|
52
|
-
|
|
66
|
+
fixedArrayMinLength: Register extends {
|
|
67
|
+
fixedArrayMinLength: infer type extends number;
|
|
68
|
+
} ? type : Register extends {
|
|
53
69
|
FixedArrayMinLength: infer type extends number;
|
|
54
|
-
} ? type : DefaultRegister['
|
|
70
|
+
} ? type : DefaultRegister['fixedArrayMinLength'];
|
|
55
71
|
/**
|
|
56
72
|
* Upper bound for fixed array length
|
|
57
73
|
* @default 99
|
|
58
74
|
*/
|
|
59
|
-
|
|
75
|
+
fixedArrayMaxLength: Register extends {
|
|
76
|
+
fixedArrayMaxLength: infer type extends number;
|
|
77
|
+
} ? type : Register extends {
|
|
60
78
|
FixedArrayMaxLength: infer type extends number;
|
|
61
|
-
} ? type : DefaultRegister['
|
|
79
|
+
} ? type : DefaultRegister['fixedArrayMaxLength'];
|
|
62
80
|
/**
|
|
63
81
|
* When set, validates {@link AbiParameter}'s `type` against {@link AbiType}
|
|
64
82
|
*
|
|
@@ -67,32 +85,69 @@ type ResolvedRegister = {
|
|
|
67
85
|
*
|
|
68
86
|
* @default false
|
|
69
87
|
*/
|
|
70
|
-
|
|
88
|
+
strictAbiType: Register extends {
|
|
89
|
+
strictAbiType: infer type extends boolean;
|
|
90
|
+
} ? type : Register extends {
|
|
71
91
|
StrictAbiType: infer type extends boolean;
|
|
72
|
-
} ? type : DefaultRegister['
|
|
92
|
+
} ? type : DefaultRegister['strictAbiType'];
|
|
93
|
+
/** @deprecated Use `addressType` instead */
|
|
94
|
+
AddressType: ResolvedRegister['addressType'];
|
|
95
|
+
/** @deprecated Use `addressType` instead */
|
|
96
|
+
BigIntType: ResolvedRegister['bigIntType'];
|
|
97
|
+
/** @deprecated Use `bytesType` instead */
|
|
98
|
+
BytesType: ResolvedRegister['bytesType'];
|
|
99
|
+
/** @deprecated Use `intType` instead */
|
|
100
|
+
IntType: ResolvedRegister['intType'];
|
|
101
|
+
/** @deprecated Use `arrayMaxDepth` instead */
|
|
102
|
+
ArrayMaxDepth: ResolvedRegister['arrayMaxDepth'];
|
|
103
|
+
/** @deprecated Use `fixedArrayMinLength` instead */
|
|
104
|
+
FixedArrayMinLength: ResolvedRegister['fixedArrayMinLength'];
|
|
105
|
+
/** @deprecated Use `fixedArrayMaxLength` instead */
|
|
106
|
+
FixedArrayMaxLength: ResolvedRegister['fixedArrayMaxLength'];
|
|
107
|
+
/** @deprecated Use `strictAbiType` instead */
|
|
108
|
+
StrictAbiType: ResolvedRegister['strictAbiType'];
|
|
73
109
|
};
|
|
74
110
|
type DefaultRegister = {
|
|
75
111
|
/** Maximum depth for nested array types (e.g. string[][]) */
|
|
76
|
-
|
|
112
|
+
arrayMaxDepth: false;
|
|
77
113
|
/** Lower bound for fixed array length */
|
|
78
|
-
|
|
114
|
+
fixedArrayMinLength: 1;
|
|
79
115
|
/** Upper bound for fixed array length */
|
|
80
|
-
|
|
116
|
+
fixedArrayMaxLength: 99;
|
|
81
117
|
/** TypeScript type to use for `address` values */
|
|
82
|
-
|
|
118
|
+
addressType: `0x${string}`;
|
|
83
119
|
/** TypeScript type to use for `bytes` values */
|
|
84
|
-
|
|
120
|
+
bytesType: {
|
|
85
121
|
/** TypeScript type to use for `bytes` input values */
|
|
86
122
|
inputs: `0x${string}`;
|
|
87
123
|
/** TypeScript type to use for `bytes` output values */
|
|
88
124
|
outputs: `0x${string}`;
|
|
89
125
|
};
|
|
90
126
|
/** TypeScript type to use for `int<M>` and `uint<M>` values, where `M > 48` */
|
|
91
|
-
|
|
127
|
+
bigIntType: bigint;
|
|
92
128
|
/** TypeScript type to use for `int<M>` and `uint<M>` values, where `M <= 48` */
|
|
93
|
-
|
|
129
|
+
intType: number;
|
|
94
130
|
/** When set, validates {@link AbiParameter}'s `type` against {@link AbiType} */
|
|
95
|
-
|
|
131
|
+
strictAbiType: false;
|
|
132
|
+
/** @deprecated Use `arrayMaxDepth` instead */
|
|
133
|
+
ArrayMaxDepth: DefaultRegister['arrayMaxDepth'];
|
|
134
|
+
/** @deprecated Use `fixedArrayMinLength` instead */
|
|
135
|
+
FixedArrayMinLength: DefaultRegister['fixedArrayMinLength'];
|
|
136
|
+
/** @deprecated Use `fixedArrayMaxLength` instead */
|
|
137
|
+
FixedArrayMaxLength: DefaultRegister['fixedArrayMaxLength'];
|
|
138
|
+
/** @deprecated Use `addressType` instead */
|
|
139
|
+
AddressType: DefaultRegister['addressType'];
|
|
140
|
+
/** @deprecated Use `bytesType` instead */
|
|
141
|
+
BytesType: {
|
|
142
|
+
inputs: DefaultRegister['bytesType']['inputs'];
|
|
143
|
+
outputs: DefaultRegister['bytesType']['outputs'];
|
|
144
|
+
};
|
|
145
|
+
/** @deprecated Use `bigIntType` instead */
|
|
146
|
+
BigIntType: DefaultRegister['bigIntType'];
|
|
147
|
+
/** @deprecated Use `intType` instead */
|
|
148
|
+
IntType: DefaultRegister['intType'];
|
|
149
|
+
/** @deprecated Use `strictAbiType` instead */
|
|
150
|
+
StrictAbiType: DefaultRegister['strictAbiType'];
|
|
96
151
|
};
|
|
97
152
|
|
|
98
153
|
/**
|
|
@@ -103,21 +158,21 @@ type DefaultRegister = {
|
|
|
103
158
|
* type Result = Pretty<{ a: string } | { b: string } | { c: number, d: bigint }>
|
|
104
159
|
* // ^? type Result = { a: string; b: string; c: number; d: bigint }
|
|
105
160
|
*/
|
|
106
|
-
type Pretty<
|
|
107
|
-
[
|
|
161
|
+
type Pretty<type> = {
|
|
162
|
+
[key in keyof type]: type[key];
|
|
108
163
|
} & unknown;
|
|
109
164
|
/**
|
|
110
165
|
* Creates range between two positive numbers using [tail recursion](https://www.typescriptlang.org/docs/handbook/release-notes/typescript-4-5.html#tail-recursion-elimination-on-conditional-types).
|
|
111
166
|
*
|
|
112
|
-
* @param
|
|
113
|
-
* @param
|
|
114
|
-
* @returns Array with inclusive range from {@link
|
|
167
|
+
* @param start - Number to start range
|
|
168
|
+
* @param stop - Number to end range
|
|
169
|
+
* @returns Array with inclusive range from {@link start} to {@link stop}
|
|
115
170
|
*
|
|
116
171
|
* @example
|
|
117
172
|
* type Result = Range<1, 3>
|
|
118
173
|
* // ^? type Result = [1, 2, 3]
|
|
119
174
|
*/
|
|
120
|
-
type Range<
|
|
175
|
+
type Range<start extends number, stop extends number, result extends number[] = [], padding extends 0[] = [], current extends number = [...padding, ...result]['length'] & number> = current extends stop ? current extends start ? [current] : result extends [] ? [] : [...result, current] : current extends start ? Range<start, stop, [current], padding> : result extends [] ? Range<start, stop, [], [...padding, 0]> : Range<start, stop, [...result, current], padding>;
|
|
121
176
|
|
|
122
177
|
type MBytes = '' | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32;
|
|
123
178
|
type MBits = '' | 8 | 16 | 24 | 32 | 40 | 48 | 56 | 64 | 72 | 80 | 88 | 96 | 104 | 112 | 120 | 128 | 136 | 144 | 152 | 160 | 168 | 176 | 184 | 192 | 200 | 208 | 216 | 224 | 232 | 240 | 248 | 256;
|
|
@@ -128,17 +183,20 @@ type SolidityFunction = 'function';
|
|
|
128
183
|
type SolidityString = 'string';
|
|
129
184
|
type SolidityTuple = 'tuple';
|
|
130
185
|
type SolidityInt = `${'u' | ''}int${MBits}`;
|
|
131
|
-
type SolidityFixedArrayRange = Range<ResolvedRegister['
|
|
186
|
+
type SolidityFixedArrayRange = Range<ResolvedRegister['fixedArrayMinLength'], ResolvedRegister['fixedArrayMaxLength']>[number];
|
|
132
187
|
/**
|
|
133
188
|
* Recursively build arrays up to maximum depth
|
|
134
189
|
* or use a more broad type when maximum depth is switched "off"
|
|
135
190
|
*/
|
|
136
|
-
type _BuildArrayTypes<T extends string, Depth extends readonly number[] = []> = ResolvedRegister['
|
|
191
|
+
type _BuildArrayTypes<T extends string, Depth extends readonly number[] = []> = ResolvedRegister['arrayMaxDepth'] extends false ? `${T}[${string}]` : Depth['length'] extends ResolvedRegister['arrayMaxDepth'] ? T : T extends `${any}[${SolidityFixedArrayRange | ''}]` ? _BuildArrayTypes<T | `${T}[${SolidityFixedArrayRange | ''}]`, [
|
|
192
|
+
...Depth,
|
|
193
|
+
1
|
|
194
|
+
]> : _BuildArrayTypes<`${T}[${SolidityFixedArrayRange | ''}]`, [...Depth, 1]>;
|
|
137
195
|
type SolidityArrayWithoutTuple = _BuildArrayTypes<SolidityAddress | SolidityBool | SolidityBytes | SolidityFunction | SolidityInt | SolidityString>;
|
|
138
196
|
type SolidityArrayWithTuple = _BuildArrayTypes<SolidityTuple>;
|
|
139
197
|
type SolidityArray = SolidityArrayWithoutTuple | SolidityArrayWithTuple;
|
|
140
198
|
type AbiType = SolidityArray | SolidityAddress | SolidityBool | SolidityBytes | SolidityFunction | SolidityInt | SolidityString | SolidityTuple;
|
|
141
|
-
type ResolvedAbiType = ResolvedRegister['
|
|
199
|
+
type ResolvedAbiType = ResolvedRegister['strictAbiType'] extends true ? AbiType : string;
|
|
142
200
|
type AbiInternalType = ResolvedAbiType | `address ${string}` | `contract ${string}` | `enum ${string}` | `struct ${string}`;
|
|
143
201
|
type AbiParameter = Pretty<{
|
|
144
202
|
type: ResolvedAbiType;
|
|
@@ -151,9 +209,9 @@ type AbiParameter = Pretty<{
|
|
|
151
209
|
type: SolidityTuple | SolidityArrayWithTuple;
|
|
152
210
|
components: readonly AbiParameter[];
|
|
153
211
|
})>;
|
|
154
|
-
type AbiEventParameter =
|
|
212
|
+
type AbiEventParameter = AbiParameter & {
|
|
155
213
|
indexed?: boolean | undefined;
|
|
156
|
-
}
|
|
214
|
+
};
|
|
157
215
|
/**
|
|
158
216
|
* State mutability for {@link AbiFunction}
|
|
159
217
|
*
|
|
@@ -255,6 +313,9 @@ type ReadingArgs<TAbi extends Abi, TFunctionName extends ContractFunctionName<TA
|
|
|
255
313
|
type DeployOptions = {
|
|
256
314
|
linkedData?: any;
|
|
257
315
|
deterministic?: boolean | `0x${string}`;
|
|
316
|
+
libraries?: {
|
|
317
|
+
[name: string]: Address;
|
|
318
|
+
};
|
|
258
319
|
} & ({
|
|
259
320
|
skipIfAlreadyDeployed?: boolean;
|
|
260
321
|
} | {
|
package/dist/index.mjs
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { extendEnvironment } from 'rocketh';
|
|
2
|
-
import { encodeFunctionData, decodeFunctionResult, encodeDeployData, keccak256 } from 'viem';
|
|
2
|
+
import { encodeFunctionData, decodeFunctionResult, encodeDeployData, keccak256, encodePacked } from 'viem';
|
|
3
3
|
import { logs } from 'named-logs';
|
|
4
4
|
|
|
5
5
|
const logger = logs("rocketh-deploy");
|
|
@@ -20,6 +20,52 @@ async function broadcastTransaction(env, signer, params) {
|
|
|
20
20
|
});
|
|
21
21
|
}
|
|
22
22
|
}
|
|
23
|
+
function linkRawLibrary(bytecode, libraryName, libraryAddress) {
|
|
24
|
+
const address = libraryAddress.replace("0x", "");
|
|
25
|
+
let encodedLibraryName;
|
|
26
|
+
if (libraryName.startsWith("$") && libraryName.endsWith("$")) {
|
|
27
|
+
encodedLibraryName = libraryName.slice(1, libraryName.length - 1);
|
|
28
|
+
} else {
|
|
29
|
+
encodedLibraryName = keccak256(encodePacked(["string"], [libraryName])).slice(2, 36);
|
|
30
|
+
}
|
|
31
|
+
const pattern = new RegExp(`_+\\$${encodedLibraryName}\\$_+`, "g");
|
|
32
|
+
if (!pattern.exec(bytecode)) {
|
|
33
|
+
throw new Error(`Can't link '${libraryName}' (${encodedLibraryName}) in
|
|
34
|
+
----
|
|
35
|
+
${bytecode}
|
|
36
|
+
----
|
|
37
|
+
`);
|
|
38
|
+
}
|
|
39
|
+
return bytecode.replace(pattern, address);
|
|
40
|
+
}
|
|
41
|
+
function linkRawLibraries(bytecode, libraries) {
|
|
42
|
+
for (const libName of Object.keys(libraries)) {
|
|
43
|
+
const libAddress = libraries[libName];
|
|
44
|
+
bytecode = linkRawLibrary(bytecode, libName, libAddress);
|
|
45
|
+
}
|
|
46
|
+
return bytecode;
|
|
47
|
+
}
|
|
48
|
+
function linkLibraries(artifact, libraries) {
|
|
49
|
+
let bytecode = artifact.bytecode;
|
|
50
|
+
if (libraries) {
|
|
51
|
+
if (artifact.linkReferences) {
|
|
52
|
+
for (const [fileName, fileReferences] of Object.entries(artifact.linkReferences)) {
|
|
53
|
+
for (const [libName, fixups] of Object.entries(fileReferences)) {
|
|
54
|
+
const addr = libraries[libName];
|
|
55
|
+
if (addr === void 0) {
|
|
56
|
+
continue;
|
|
57
|
+
}
|
|
58
|
+
for (const fixup of fixups) {
|
|
59
|
+
bytecode = bytecode.substring(0, 2 + fixup.start * 2) + addr.substring(2) + bytecode.substring(2 + (fixup.start + fixup.length) * 2);
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
} else {
|
|
64
|
+
bytecode = linkRawLibraries(bytecode, libraries);
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
return bytecode;
|
|
68
|
+
}
|
|
23
69
|
extendEnvironment((env) => {
|
|
24
70
|
async function execute(deployment, args) {
|
|
25
71
|
const { account, ...viemArgs } = args;
|
|
@@ -169,7 +215,7 @@ extendEnvironment((env) => {
|
|
|
169
215
|
}
|
|
170
216
|
}
|
|
171
217
|
const artifactToUse = typeof artifact === "string" ? env.artifacts[artifact] : artifact;
|
|
172
|
-
const bytecode = artifactToUse
|
|
218
|
+
const bytecode = linkLibraries(artifactToUse, options?.libraries);
|
|
173
219
|
const abi = artifactToUse.abi;
|
|
174
220
|
const argsToUse = {
|
|
175
221
|
...viemArgs,
|
package/dist/index.mjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.mjs","sources":["../src/index.ts"],"sourcesContent":["import {Abi} from 'abitype';\nimport {EIP1193DATA, EIP1193TransactionData} from 'eip-1193';\nimport type {\n\tArtifact,\n\tDeploymentConstruction,\n\tDeployment,\n\tEnvironment,\n\tPendingDeployment,\n\tPartialDeployment,\n\tPendingExecution,\n\tSigner,\n} from 'rocketh';\nimport {extendEnvironment} from 'rocketh';\nimport {\n\tChain,\n\tContractFunctionArgs,\n\tContractFunctionName,\n\tDecodeFunctionResultReturnType,\n\tEncodeDeployDataParameters,\n\tReadContractParameters,\n\tWriteContractParameters,\n\tdecodeFunctionResult,\n\tencodeFunctionData,\n\tkeccak256,\n} from 'viem';\nimport {DeployContractParameters, encodeDeployData} from 'viem';\nimport {logs} from 'named-logs';\n\nconst logger = logs('rocketh-deploy');\n\ndeclare module 'rocketh' {\n\tinterface Environment {\n\t\tdeploy: DeployFunction;\n\t\texecute: ExecuteFunction;\n\t\tread: ReadFunction;\n\t\texecuteByName: ExecuteFunctionByName;\n\t\treadByName: ReadFunctionByName;\n\t}\n}\n\nexport type DeployFunction = <TAbi extends Abi, TChain extends Chain = Chain>(\n\tname: string,\n\targs: DeploymentConstruction<TAbi>,\n\toptions?: DeployOptions\n) => Promise<Deployment<TAbi> & {updated: boolean}>;\n\nexport type ExecuteFunction = <\n\tTAbi extends Abi,\n\tTFunctionName extends ContractFunctionName<TAbi, 'nonpayable' | 'payable'>,\n\tTArgs extends ContractFunctionArgs<TAbi, 'nonpayable' | 'payable', TFunctionName> = ContractFunctionArgs<\n\t\tTAbi,\n\t\t'nonpayable' | 'payable',\n\t\tTFunctionName\n\t>\n>(\n\tdeployment: Deployment<TAbi>,\n\targs: ExecutionArgs<TAbi, TFunctionName, TArgs>\n) => Promise<EIP1193DATA>;\n\nexport type ExecuteFunctionByName = <\n\tTAbi extends Abi,\n\tTFunctionName extends ContractFunctionName<TAbi, 'nonpayable' | 'payable'>,\n\tTArgs extends ContractFunctionArgs<TAbi, 'nonpayable' | 'payable', TFunctionName> = ContractFunctionArgs<\n\t\tTAbi,\n\t\t'nonpayable' | 'payable',\n\t\tTFunctionName\n\t>\n>(\n\tname: string,\n\targs: ExecutionArgs<TAbi, TFunctionName, TArgs>\n) => Promise<EIP1193DATA>;\n\nexport type ReadFunction = <\n\tTAbi extends Abi,\n\tTFunctionName extends ContractFunctionName<TAbi, 'pure' | 'view'>,\n\tTArgs extends ContractFunctionArgs<TAbi, 'pure' | 'view', TFunctionName> = ContractFunctionArgs<\n\t\tTAbi,\n\t\t'pure' | 'view',\n\t\tTFunctionName\n\t>\n>(\n\tdeployment: Deployment<TAbi>,\n\targs: ReadingArgs<TAbi, TFunctionName, TArgs>\n) => Promise<DecodeFunctionResultReturnType<TAbi, TFunctionName>>;\n\nexport type ReadFunctionByName = <\n\tTAbi extends Abi,\n\tTFunctionName extends ContractFunctionName<TAbi, 'pure' | 'view'>,\n\tTArgs extends ContractFunctionArgs<TAbi, 'pure' | 'view', TFunctionName> = ContractFunctionArgs<\n\t\tTAbi,\n\t\t'pure' | 'view',\n\t\tTFunctionName\n\t>\n>(\n\tname: string,\n\targs: ReadingArgs<TAbi, TFunctionName, TArgs>\n) => Promise<DecodeFunctionResultReturnType<TAbi, TFunctionName>>;\n\nexport type ExecutionArgs<\n\tTAbi extends Abi,\n\tTFunctionName extends ContractFunctionName<TAbi, 'nonpayable' | 'payable'>,\n\tTArgs extends ContractFunctionArgs<TAbi, 'nonpayable' | 'payable', TFunctionName> = ContractFunctionArgs<\n\t\tTAbi,\n\t\t'nonpayable' | 'payable',\n\t\tTFunctionName\n\t>\n> = Omit<WriteContractParameters<TAbi, TFunctionName, TArgs>, 'address' | 'abi' | 'account' | 'nonce' | 'chain'> & {\n\taccount: string;\n};\n\nexport type ReadingArgs<\n\tTAbi extends Abi,\n\tTFunctionName extends ContractFunctionName<TAbi, 'pure' | 'view'>,\n\tTArgs extends ContractFunctionArgs<TAbi, 'pure' | 'view', TFunctionName> = ContractFunctionArgs<\n\t\tTAbi,\n\t\t'pure' | 'view',\n\t\tTFunctionName\n\t>\n> = Omit<ReadContractParameters<TAbi, TFunctionName, TArgs>, 'address' | 'abi' | 'account' | 'nonce'> & {\n\taccount?: string;\n};\n\nexport type DeployOptions = {linkedData?: any; deterministic?: boolean | `0x${string}`} & (\n\t| {\n\t\t\tskipIfAlreadyDeployed?: boolean;\n\t }\n\t| {\n\t\t\talwaysOverride?: boolean;\n\t }\n);\n\nasync function broadcastTransaction(\n\tenv: Environment,\n\tsigner: Signer,\n\tparams: [EIP1193TransactionData]\n): Promise<`0x${string}`> {\n\tif (signer.type === 'wallet' || signer.type === 'remote') {\n\t\treturn signer.signer.request({\n\t\t\tmethod: 'eth_sendTransaction',\n\t\t\tparams,\n\t\t});\n\t} else {\n\t\tconst rawTx = await signer.signer.request({\n\t\t\tmethod: 'eth_signTransaction',\n\t\t\tparams,\n\t\t});\n\n\t\treturn env.network.provider.request({\n\t\t\tmethod: 'eth_sendRawTransaction',\n\t\t\tparams: [rawTx],\n\t\t});\n\t}\n}\n\nextendEnvironment((env: Environment) => {\n\tasync function execute<\n\t\tTAbi extends Abi,\n\t\tTFunctionName extends ContractFunctionName<TAbi, 'nonpayable' | 'payable'>,\n\t\tTArgs extends ContractFunctionArgs<TAbi, 'nonpayable' | 'payable', TFunctionName> = ContractFunctionArgs<\n\t\t\tTAbi,\n\t\t\t'nonpayable' | 'payable',\n\t\t\tTFunctionName\n\t\t>\n\t>(deployment: Deployment<TAbi>, args: ExecutionArgs<TAbi, TFunctionName, TArgs>) {\n\t\tconst {account, ...viemArgs} = args;\n\t\tlet address: `0x${string}`;\n\t\tif (account.startsWith('0x')) {\n\t\t\taddress = account as `0x${string}`;\n\t\t} else {\n\t\t\tif (env.namedAccounts) {\n\t\t\t\taddress = env.namedAccounts[account];\n\t\t\t\tif (!address) {\n\t\t\t\t\tthrow new Error(`no address for ${account}`);\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tthrow new Error(`no accounts setup, cannot get address for ${account}`);\n\t\t\t}\n\t\t}\n\n\t\tconst artifactToUse = deployment as unknown as Artifact<TAbi>;\n\t\tconst abi = artifactToUse.abi;\n\t\tconst calldata = encodeFunctionData<TAbi, TFunctionName>({\n\t\t\tabi,\n\t\t\tfunctionName: viemArgs.functionName,\n\t\t\targs: viemArgs.args,\n\t\t} as any);\n\n\t\tconst signer = env.addressSigners[address];\n\n\t\tconst txParam: EIP1193TransactionData = {\n\t\t\tto: deployment.address,\n\t\t\ttype: '0x2',\n\t\t\tfrom: address,\n\t\t\tchainId: `0x${env.network.chain.id.toString(16)}` as `0x${string}`,\n\t\t\tdata: calldata,\n\t\t\tgas: viemArgs.gas && (`0x${viemArgs.gas.toString(16)}` as `0x${string}`),\n\t\t\t// gasPrice: viemArgs.gasPrice && `0x${viemArgs.gasPrice.toString(16)}` as `0x${string}`,\n\t\t\tmaxFeePerGas: viemArgs.maxFeePerGas && (`0x${viemArgs.maxFeePerGas.toString(16)}` as `0x${string}`),\n\t\t\tmaxPriorityFeePerGas:\n\t\t\t\tviemArgs.maxPriorityFeePerGas && (`0x${viemArgs.maxPriorityFeePerGas.toString(16)}` as `0x${string}`),\n\t\t\t// nonce: viemArgs.nonce && (`0x${viemArgs.nonce.toString(16)}` as `0x${string}`),\n\t\t};\n\t\tif (viemArgs.value) {\n\t\t\ttxParam.value = `0x${viemArgs.value?.toString(16)}` as `0x${string}`;\n\t\t}\n\n\t\tlet txHash: `0x${string}`;\n\t\tif (signer.type === 'wallet' || signer.type === 'remote') {\n\t\t\ttxHash = await signer.signer.request({\n\t\t\t\tmethod: 'eth_sendTransaction',\n\t\t\t\tparams: [txParam],\n\t\t\t});\n\t\t} else {\n\t\t\tconst rawTx = await signer.signer.request({\n\t\t\t\tmethod: 'eth_signTransaction',\n\t\t\t\tparams: [txParam],\n\t\t\t});\n\n\t\t\ttxHash = await env.network.provider.request({\n\t\t\t\tmethod: 'eth_sendRawTransaction',\n\t\t\t\tparams: [rawTx],\n\t\t\t});\n\t\t}\n\n\t\tconst pendingExecution: PendingExecution = {\n\t\t\ttype: 'execution',\n\t\t\ttransaction: {hash: txHash, origin: address},\n\t\t\t// description, // TODO\n\t\t\t// TODO we should have the nonce, except for wallet like metamask where it is not usre you get the nonce you start with\n\t\t};\n\t\tawait env.savePendingExecution(pendingExecution);\n\t\treturn txHash;\n\t}\n\n\tasync function executeByName<\n\t\tTAbi extends Abi,\n\t\tTFunctionName extends ContractFunctionName<TAbi, 'nonpayable' | 'payable'>,\n\t\tTArgs extends ContractFunctionArgs<TAbi, 'nonpayable' | 'payable', TFunctionName> = ContractFunctionArgs<\n\t\t\tTAbi,\n\t\t\t'nonpayable' | 'payable',\n\t\t\tTFunctionName\n\t\t>\n\t>(name: string, args: ExecutionArgs<TAbi, TFunctionName, TArgs>) {\n\t\tconst deployment = env.getOrNull<TAbi>(name);\n\t\tif (!deployment) {\n\t\t\tthrow new Error(`no deployment named ${name}`);\n\t\t}\n\n\t\treturn execute(deployment, args);\n\t}\n\n\tasync function read<\n\t\tTAbi extends Abi,\n\t\tTFunctionName extends ContractFunctionName<TAbi, 'pure' | 'view'>,\n\t\tTArgs extends ContractFunctionArgs<TAbi, 'pure' | 'view', TFunctionName> = ContractFunctionArgs<\n\t\t\tTAbi,\n\t\t\t'pure' | 'view',\n\t\t\tTFunctionName\n\t\t>\n\t>(\n\t\tdeployment: Deployment<TAbi>,\n\t\targs: ReadingArgs<TAbi, TFunctionName, TArgs>\n\t): Promise<DecodeFunctionResultReturnType<TAbi, TFunctionName>> {\n\t\tconst {account, ...viemArgs} = args;\n\t\tlet address: `0x${string}` | undefined;\n\t\tif (account) {\n\t\t\tif (account.startsWith('0x')) {\n\t\t\t\taddress = account as `0x${string}`;\n\t\t\t} else {\n\t\t\t\tif (env.namedAccounts) {\n\t\t\t\t\taddress = env.namedAccounts[account];\n\t\t\t\t\tif (!address) {\n\t\t\t\t\t\tthrow new Error(`no address for ${account}`);\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tthrow new Error(`no accounts setup, cannot get address for ${account}`);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tconst artifactToUse = deployment as unknown as Artifact<TAbi>;\n\t\tconst abi = artifactToUse.abi;\n\t\tconst calldata = encodeFunctionData<TAbi, TFunctionName>({\n\t\t\tabi,\n\t\t\tfunctionName: viemArgs.functionName,\n\t\t\targs: viemArgs.args,\n\t\t} as any);\n\n\t\tconst result: `0x${string}` = (await env.network.provider.request({\n\t\t\tmethod: 'eth_call',\n\t\t\tparams: [\n\t\t\t\t{\n\t\t\t\t\tto: deployment.address,\n\t\t\t\t\ttype: '0x2',\n\t\t\t\t\tfrom: address,\n\t\t\t\t\tchainId: `0x${env.network.chain.id.toString(16)}` as `0x${string}`,\n\t\t\t\t\tdata: calldata,\n\t\t\t\t\t// value: `0x${viemArgs.value?.toString(16)}` as `0x${string}`,\n\t\t\t\t},\n\t\t\t],\n\t\t})) as `0x${string}`;\n\n\t\tconst parsed = decodeFunctionResult<TAbi, TFunctionName>({\n\t\t\tabi,\n\t\t\tfunctionName: viemArgs.functionName,\n\t\t\tdata: result,\n\t\t\targs: viemArgs.args,\n\t\t} as any);\n\n\t\treturn parsed as DecodeFunctionResultReturnType<TAbi, TFunctionName>;\n\t}\n\n\tasync function readByName<\n\t\tTAbi extends Abi,\n\t\tTFunctionName extends ContractFunctionName<TAbi, 'pure' | 'view'>,\n\t\tTArgs extends ContractFunctionArgs<TAbi, 'pure' | 'view', TFunctionName> = ContractFunctionArgs<\n\t\t\tTAbi,\n\t\t\t'pure' | 'view',\n\t\t\tTFunctionName\n\t\t>\n\t>(\n\t\tname: string,\n\t\targs: ReadingArgs<TAbi, TFunctionName, TArgs>\n\t): Promise<DecodeFunctionResultReturnType<TAbi, TFunctionName>> {\n\t\tconst deployment = env.getOrNull<TAbi>(name);\n\t\tif (!deployment) {\n\t\t\tthrow new Error(`no deployment named ${name}`);\n\t\t}\n\n\t\treturn read(deployment, args);\n\t}\n\tasync function deploy<TAbi extends Abi>(\n\t\tname: string,\n\t\targs: DeploymentConstruction<TAbi>,\n\t\toptions?: DeployOptions\n\t): Promise<Deployment<TAbi> & {updated: boolean}> {\n\t\tconst skipIfAlreadyDeployed = options && 'skipIfAlreadyDeployed' in options && options.skipIfAlreadyDeployed;\n\t\tconst allwaysOverride = options && 'allwaysOverride' in options && options.allwaysOverride;\n\n\t\tif (allwaysOverride && skipIfAlreadyDeployed) {\n\t\t\tthrow new Error(`conflicting options: \"allwaysOverride\" and \"skipIfAlreadyDeployed\"`);\n\t\t}\n\n\t\tconst existingDeployment = env.getOrNull(name);\n\t\tif (existingDeployment && skipIfAlreadyDeployed) {\n\t\t\tlogger.info(`deployment for ${name} at ${existingDeployment.address}, skipIfAlreadyDeployed: true => we skip`);\n\t\t\treturn {...(existingDeployment as Deployment<TAbi>), updated: false};\n\t\t}\n\n\t\tconst {account, artifact, ...viemArgs} = args;\n\t\tlet address: `0x${string}`;\n\t\tif (account.startsWith('0x')) {\n\t\t\taddress = account as `0x${string}`;\n\t\t} else {\n\t\t\tif (env.namedAccounts) {\n\t\t\t\taddress = env.namedAccounts[account];\n\t\t\t\tif (!address) {\n\t\t\t\t\tthrow new Error(`no address for ${account}`);\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tthrow new Error(`no accounts setup, cannot get address for ${account}`);\n\t\t\t}\n\t\t}\n\n\t\t// TODO throw specific error if artifact not found\n\t\tconst artifactToUse = (typeof artifact === 'string' ? env.artifacts[artifact] : artifact) as Artifact<TAbi>;\n\n\t\tconst bytecode = artifactToUse.bytecode;\n\t\tconst abi = artifactToUse.abi;\n\n\t\tconst argsToUse = {\n\t\t\t...viemArgs,\n\t\t\taccount,\n\t\t\tabi,\n\t\t\tbytecode,\n\t\t};\n\n\t\tconst calldata = encodeDeployData(argsToUse as any); // TODO any\n\t\tconst argsData = `0x${calldata.replace(bytecode, '')}` as `0x${string}`;\n\n\t\tif (existingDeployment) {\n\t\t\tlogger.info(`existing deployment for ${name} at ${existingDeployment.address}`);\n\t\t}\n\n\t\tif (existingDeployment && !allwaysOverride) {\n\t\t\tconst previousBytecode = existingDeployment.bytecode;\n\t\t\tconst previousArgsData = existingDeployment.argsData;\n\t\t\t// we assume cbor encoding of hash at the end\n\t\t\t// TODO option to remove it, can parse metadata but would rather avoid this here\n\t\t\tconst last2Bytes = previousBytecode.slice(-4);\n\t\t\tconst cborLength = parseInt(last2Bytes, 16);\n\t\t\tconst previousBytecodeWithoutCBOR = previousBytecode.slice(0, -cborLength * 2);\n\t\t\tconst newBytecodeWithoutCBOR = bytecode.slice(0, -cborLength * 2);\n\t\t\tif (previousBytecodeWithoutCBOR === newBytecodeWithoutCBOR && previousArgsData === argsData) {\n\t\t\t\treturn {...(existingDeployment as Deployment<TAbi>), updated: false};\n\t\t\t} else {\n\t\t\t\t// logger.info(`-------------- WITHOUT CBOR---------------------`);\n\t\t\t\t// logger.info(previousBytecodeWithoutCBOR);\n\t\t\t\t// logger.info(newBytecodeWithoutCBOR);\n\t\t\t\t// logger.info(`-----------------------------------`);\n\t\t\t\t// logger.info(`-------------- ARGS DATA ---------------------`);\n\t\t\t\t// logger.info(previousArgsData);\n\t\t\t\t// logger.info(argsData);\n\t\t\t\t// logger.info(`-----------------------------------`);\n\t\t\t}\n\t\t}\n\n\t\tconst partialDeployment: PartialDeployment<TAbi> = {\n\t\t\t...artifactToUse,\n\t\t\targsData,\n\t\t\tlinkedData: options?.linkedData,\n\t\t};\n\n\t\tconst signer = env.addressSigners[address];\n\n\t\tconst chainId = `0x${env.network.chain.id.toString(16)}` as `0x${string}`;\n\t\tconst maxFeePerGas = viemArgs.maxFeePerGas && (`0x${viemArgs.maxFeePerGas.toString(16)}` as `0x${string}`);\n\t\tconst maxPriorityFeePerGas =\n\t\t\tviemArgs.maxPriorityFeePerGas && (`0x${viemArgs.maxPriorityFeePerGas.toString(16)}` as `0x${string}`);\n\n\t\tconst params: [EIP1193TransactionData] = [\n\t\t\t{\n\t\t\t\ttype: '0x2',\n\t\t\t\tfrom: address,\n\t\t\t\tchainId,\n\t\t\t\tdata: calldata,\n\t\t\t\tgas: viemArgs.gas && (`0x${viemArgs.gas.toString(16)}` as `0x${string}`),\n\t\t\t\tmaxFeePerGas,\n\t\t\t\tmaxPriorityFeePerGas,\n\t\t\t\t// gasPrice: viemArgs.gasPrice && `0x${viemArgs.gasPrice.toString(16)}` as `0x${string}`,\n\t\t\t\t// value: `0x${viemArgs.value?.toString(16)}` as `0x${string}`,\n\t\t\t\t// nonce: viemArgs.nonce && (`0x${viemArgs.nonce.toString(16)}` as `0x${string}`),\n\t\t\t},\n\t\t];\n\n\t\tlet expectedAddress: `0x${string}` | undefined = undefined;\n\t\tif (options?.deterministic) {\n\t\t\t// TODO make these configurable\n\t\t\tconst deterministicFactoryAddress = `0x4e59b44847b379578588920ca78fbf26c0b4956c`;\n\t\t\tconst deterministicFactoryDeployerAddress = `0x3fab184622dc19b6109349b94811493bf2a45362`;\n\t\t\tconst factoryDeploymentData = `0xf8a58085174876e800830186a08080b853604580600e600039806000f350fe7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe03601600081602082378035828234f58015156039578182fd5b8082525050506014600cf31ba02222222222222222222222222222222222222222222222222222222222222222a02222222222222222222222222222222222222222222222222222222222222222`;\n\n\t\t\tconst code = await env.network.provider.request({\n\t\t\t\tmethod: 'eth_getCode',\n\t\t\t\tparams: [deterministicFactoryAddress, 'latest'],\n\t\t\t});\n\t\t\tif (code === '0x') {\n\t\t\t\tconst balanceHexString = await env.network.provider.request({\n\t\t\t\t\tmethod: 'eth_getBalance',\n\t\t\t\t\tparams: [deterministicFactoryDeployerAddress, 'latest'],\n\t\t\t\t});\n\t\t\t\tconst balance = BigInt(balanceHexString);\n\t\t\t\tif (balance < 10000000000000000n) {\n\t\t\t\t\tconst need = 10000000000000000n - balance;\n\t\t\t\t\tconst balanceToSend = `0x${need.toString(16)}` as `0x${string}`;\n\t\t\t\t\tconst txHash = await broadcastTransaction(env, signer, [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\ttype: '0x2',\n\t\t\t\t\t\t\tchainId,\n\t\t\t\t\t\t\tfrom: address,\n\t\t\t\t\t\t\tto: deterministicFactoryDeployerAddress,\n\t\t\t\t\t\t\tvalue: balanceToSend,\n\t\t\t\t\t\t\tgas: `0x${BigInt(21000).toString(16)}`,\n\t\t\t\t\t\t\tmaxFeePerGas,\n\t\t\t\t\t\t\tmaxPriorityFeePerGas,\n\t\t\t\t\t\t},\n\t\t\t\t\t]);\n\t\t\t\t\tawait env.savePendingExecution({\n\t\t\t\t\t\ttype: 'execution', // TODO different type ?\n\t\t\t\t\t\ttransaction: {hash: txHash, origin: address},\n\t\t\t\t\t});\n\t\t\t\t}\n\n\t\t\t\tconst txHash = await env.network.provider.request({\n\t\t\t\t\tmethod: 'eth_sendRawTransaction',\n\t\t\t\t\tparams: [factoryDeploymentData],\n\t\t\t\t});\n\t\t\t\tawait env.savePendingExecution({\n\t\t\t\t\ttype: 'execution', // TODO different type ?\n\t\t\t\t\ttransaction: {hash: txHash, origin: address},\n\t\t\t\t});\n\t\t\t}\n\n\t\t\t// prepending the salt\n\t\t\tconst salt = (\n\t\t\t\ttypeof options.deterministic === 'string'\n\t\t\t\t\t? `0x${options.deterministic.slice(2).padStart(64, '0')}`\n\t\t\t\t\t: '0x0000000000000000000000000000000000000000000000000000000000000000'\n\t\t\t) as `0x${string}`;\n\n\t\t\tconst bytecode = params[0].data || '0x';\n\n\t\t\texpectedAddress = ('0x' +\n\t\t\t\tkeccak256(`0xff${deterministicFactoryAddress.slice(2)}${salt.slice(2)}${keccak256(bytecode).slice(2)}`).slice(\n\t\t\t\t\t-40\n\t\t\t\t)) as `0x${string}`;\n\n\t\t\tconst codeAlreadyDeployed = await env.network.provider.request({\n\t\t\t\tmethod: 'eth_getCode',\n\t\t\t\tparams: [expectedAddress, 'latest'],\n\t\t\t});\n\n\t\t\tif (codeAlreadyDeployed !== '0x') {\n\t\t\t\tenv.showMessage(`contract was already deterministically deployed at ${expectedAddress}`);\n\t\t\t\tconst deployment = await env.save(name, {\n\t\t\t\t\taddress: expectedAddress,\n\t\t\t\t\t...partialDeployment,\n\t\t\t\t});\n\t\t\t\treturn {...(deployment as Deployment<TAbi>), updated: true};\n\t\t\t}\n\n\t\t\tparams[0].data = (salt + (bytecode.slice(2) || '')) as `0x${string}`;\n\t\t\tparams[0].to = deterministicFactoryAddress;\n\t\t}\n\n\t\tconst txHash = await broadcastTransaction(env, signer, params);\n\n\t\tconst pendingDeployment: PendingDeployment<TAbi> = {\n\t\t\ttype: 'deployment',\n\t\t\texpectedAddress,\n\t\t\tpartialDeployment,\n\t\t\ttransaction: {hash: txHash, origin: address},\n\t\t\tname,\n\t\t\t// TODO we should have the nonce, except for wallet like metamask where it is not usre you get the nonce you start with\n\t\t};\n\t\tconst deployment = await env.savePendingDeployment(pendingDeployment);\n\t\treturn {...(deployment as Deployment<TAbi>), updated: true};\n\t}\n\n\tenv.deploy = deploy;\n\tenv.execute = execute;\n\tenv.executeByName = executeByName;\n\tenv.read = read;\n\tenv.readByName = readByName;\n\treturn env;\n});\n"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.mjs","sources":["../src/index.ts"],"sourcesContent":["import {Abi} from 'abitype';\nimport {EIP1193DATA, EIP1193TransactionData} from 'eip-1193';\nimport type {\n\tArtifact,\n\tDeploymentConstruction,\n\tDeployment,\n\tEnvironment,\n\tPendingDeployment,\n\tPartialDeployment,\n\tPendingExecution,\n\tSigner,\n} from 'rocketh';\nimport {extendEnvironment} from 'rocketh';\nimport {\n\tAddress,\n\tChain,\n\tContractFunctionArgs,\n\tContractFunctionName,\n\tDecodeFunctionResultReturnType,\n\tEncodeDeployDataParameters,\n\tReadContractParameters,\n\tWriteContractParameters,\n\tdecodeFunctionResult,\n\tencodeFunctionData,\n\tencodePacked,\n\tkeccak256,\n} from 'viem';\nimport {DeployContractParameters, encodeDeployData} from 'viem';\nimport {logs} from 'named-logs';\n\nconst logger = logs('rocketh-deploy');\n\ndeclare module 'rocketh' {\n\tinterface Environment {\n\t\tdeploy: DeployFunction;\n\t\texecute: ExecuteFunction;\n\t\tread: ReadFunction;\n\t\texecuteByName: ExecuteFunctionByName;\n\t\treadByName: ReadFunctionByName;\n\t}\n}\n\nexport type DeployFunction = <TAbi extends Abi, TChain extends Chain = Chain>(\n\tname: string,\n\targs: DeploymentConstruction<TAbi>,\n\toptions?: DeployOptions\n) => Promise<Deployment<TAbi> & {updated: boolean}>;\n\nexport type ExecuteFunction = <\n\tTAbi extends Abi,\n\tTFunctionName extends ContractFunctionName<TAbi, 'nonpayable' | 'payable'>,\n\tTArgs extends ContractFunctionArgs<TAbi, 'nonpayable' | 'payable', TFunctionName> = ContractFunctionArgs<\n\t\tTAbi,\n\t\t'nonpayable' | 'payable',\n\t\tTFunctionName\n\t>\n>(\n\tdeployment: Deployment<TAbi>,\n\targs: ExecutionArgs<TAbi, TFunctionName, TArgs>\n) => Promise<EIP1193DATA>;\n\nexport type ExecuteFunctionByName = <\n\tTAbi extends Abi,\n\tTFunctionName extends ContractFunctionName<TAbi, 'nonpayable' | 'payable'>,\n\tTArgs extends ContractFunctionArgs<TAbi, 'nonpayable' | 'payable', TFunctionName> = ContractFunctionArgs<\n\t\tTAbi,\n\t\t'nonpayable' | 'payable',\n\t\tTFunctionName\n\t>\n>(\n\tname: string,\n\targs: ExecutionArgs<TAbi, TFunctionName, TArgs>\n) => Promise<EIP1193DATA>;\n\nexport type ReadFunction = <\n\tTAbi extends Abi,\n\tTFunctionName extends ContractFunctionName<TAbi, 'pure' | 'view'>,\n\tTArgs extends ContractFunctionArgs<TAbi, 'pure' | 'view', TFunctionName> = ContractFunctionArgs<\n\t\tTAbi,\n\t\t'pure' | 'view',\n\t\tTFunctionName\n\t>\n>(\n\tdeployment: Deployment<TAbi>,\n\targs: ReadingArgs<TAbi, TFunctionName, TArgs>\n) => Promise<DecodeFunctionResultReturnType<TAbi, TFunctionName>>;\n\nexport type ReadFunctionByName = <\n\tTAbi extends Abi,\n\tTFunctionName extends ContractFunctionName<TAbi, 'pure' | 'view'>,\n\tTArgs extends ContractFunctionArgs<TAbi, 'pure' | 'view', TFunctionName> = ContractFunctionArgs<\n\t\tTAbi,\n\t\t'pure' | 'view',\n\t\tTFunctionName\n\t>\n>(\n\tname: string,\n\targs: ReadingArgs<TAbi, TFunctionName, TArgs>\n) => Promise<DecodeFunctionResultReturnType<TAbi, TFunctionName>>;\n\nexport type ExecutionArgs<\n\tTAbi extends Abi,\n\tTFunctionName extends ContractFunctionName<TAbi, 'nonpayable' | 'payable'>,\n\tTArgs extends ContractFunctionArgs<TAbi, 'nonpayable' | 'payable', TFunctionName> = ContractFunctionArgs<\n\t\tTAbi,\n\t\t'nonpayable' | 'payable',\n\t\tTFunctionName\n\t>\n> = Omit<WriteContractParameters<TAbi, TFunctionName, TArgs>, 'address' | 'abi' | 'account' | 'nonce' | 'chain'> & {\n\taccount: string;\n};\n\nexport type ReadingArgs<\n\tTAbi extends Abi,\n\tTFunctionName extends ContractFunctionName<TAbi, 'pure' | 'view'>,\n\tTArgs extends ContractFunctionArgs<TAbi, 'pure' | 'view', TFunctionName> = ContractFunctionArgs<\n\t\tTAbi,\n\t\t'pure' | 'view',\n\t\tTFunctionName\n\t>\n> = Omit<ReadContractParameters<TAbi, TFunctionName, TArgs>, 'address' | 'abi' | 'account' | 'nonce'> & {\n\taccount?: string;\n};\n\nexport type DeployOptions = {\n\tlinkedData?: any;\n\tdeterministic?: boolean | `0x${string}`;\n\tlibraries?: {[name: string]: Address};\n} & (\n\t| {\n\t\t\tskipIfAlreadyDeployed?: boolean;\n\t }\n\t| {\n\t\t\talwaysOverride?: boolean;\n\t }\n);\n\nasync function broadcastTransaction(\n\tenv: Environment,\n\tsigner: Signer,\n\tparams: [EIP1193TransactionData]\n): Promise<`0x${string}`> {\n\tif (signer.type === 'wallet' || signer.type === 'remote') {\n\t\treturn signer.signer.request({\n\t\t\tmethod: 'eth_sendTransaction',\n\t\t\tparams,\n\t\t});\n\t} else {\n\t\tconst rawTx = await signer.signer.request({\n\t\t\tmethod: 'eth_signTransaction',\n\t\t\tparams,\n\t\t});\n\n\t\treturn env.network.provider.request({\n\t\t\tmethod: 'eth_sendRawTransaction',\n\t\t\tparams: [rawTx],\n\t\t});\n\t}\n}\n\nfunction linkRawLibrary(bytecode: string, libraryName: string, libraryAddress: string): string {\n\tconst address = libraryAddress.replace('0x', '');\n\tlet encodedLibraryName;\n\tif (libraryName.startsWith('$') && libraryName.endsWith('$')) {\n\t\tencodedLibraryName = libraryName.slice(1, libraryName.length - 1);\n\t} else {\n\t\tencodedLibraryName = keccak256(encodePacked(['string'], [libraryName])).slice(2, 36);\n\t}\n\tconst pattern = new RegExp(`_+\\\\$${encodedLibraryName}\\\\$_+`, 'g');\n\tif (!pattern.exec(bytecode)) {\n\t\tthrow new Error(`Can't link '${libraryName}' (${encodedLibraryName}) in \\n----\\n ${bytecode}\\n----\\n`);\n\t}\n\treturn bytecode.replace(pattern, address);\n}\n\nfunction linkRawLibraries(bytecode: string, libraries: {[libraryName: string]: Address}): string {\n\tfor (const libName of Object.keys(libraries)) {\n\t\tconst libAddress = libraries[libName];\n\t\tbytecode = linkRawLibrary(bytecode, libName, libAddress);\n\t}\n\treturn bytecode;\n}\n\nfunction linkLibraries(\n\tartifact: {\n\t\tbytecode: string;\n\t\tlinkReferences?: {\n\t\t\t[libraryFileName: string]: {\n\t\t\t\t[libraryName: string]: Array<{length: number; start: number}>;\n\t\t\t};\n\t\t};\n\t},\n\tlibraries?: {[libraryName: string]: Address}\n) {\n\tlet bytecode = artifact.bytecode;\n\n\tif (libraries) {\n\t\tif (artifact.linkReferences) {\n\t\t\tfor (const [fileName, fileReferences] of Object.entries(artifact.linkReferences)) {\n\t\t\t\tfor (const [libName, fixups] of Object.entries(fileReferences)) {\n\t\t\t\t\tconst addr = libraries[libName];\n\t\t\t\t\tif (addr === undefined) {\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\n\t\t\t\t\tfor (const fixup of fixups) {\n\t\t\t\t\t\tbytecode =\n\t\t\t\t\t\t\tbytecode.substring(0, 2 + fixup.start * 2) +\n\t\t\t\t\t\t\taddr.substring(2) +\n\t\t\t\t\t\t\tbytecode.substring(2 + (fixup.start + fixup.length) * 2);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t} else {\n\t\t\tbytecode = linkRawLibraries(bytecode, libraries);\n\t\t}\n\t}\n\n\t// TODO return libraries object with path name <filepath.sol>:<name> for names\n\n\treturn bytecode;\n}\n\nextendEnvironment((env: Environment) => {\n\tasync function execute<\n\t\tTAbi extends Abi,\n\t\tTFunctionName extends ContractFunctionName<TAbi, 'nonpayable' | 'payable'>,\n\t\tTArgs extends ContractFunctionArgs<TAbi, 'nonpayable' | 'payable', TFunctionName> = ContractFunctionArgs<\n\t\t\tTAbi,\n\t\t\t'nonpayable' | 'payable',\n\t\t\tTFunctionName\n\t\t>\n\t>(deployment: Deployment<TAbi>, args: ExecutionArgs<TAbi, TFunctionName, TArgs>) {\n\t\tconst {account, ...viemArgs} = args;\n\t\tlet address: `0x${string}`;\n\t\tif (account.startsWith('0x')) {\n\t\t\taddress = account as `0x${string}`;\n\t\t} else {\n\t\t\tif (env.namedAccounts) {\n\t\t\t\taddress = env.namedAccounts[account];\n\t\t\t\tif (!address) {\n\t\t\t\t\tthrow new Error(`no address for ${account}`);\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tthrow new Error(`no accounts setup, cannot get address for ${account}`);\n\t\t\t}\n\t\t}\n\n\t\tconst artifactToUse = deployment as unknown as Artifact<TAbi>;\n\t\tconst abi = artifactToUse.abi;\n\t\tconst calldata = encodeFunctionData<TAbi, TFunctionName>({\n\t\t\tabi,\n\t\t\tfunctionName: viemArgs.functionName,\n\t\t\targs: viemArgs.args,\n\t\t} as any);\n\n\t\tconst signer = env.addressSigners[address];\n\n\t\tconst txParam: EIP1193TransactionData = {\n\t\t\tto: deployment.address,\n\t\t\ttype: '0x2',\n\t\t\tfrom: address,\n\t\t\tchainId: `0x${env.network.chain.id.toString(16)}` as `0x${string}`,\n\t\t\tdata: calldata,\n\t\t\tgas: viemArgs.gas && (`0x${viemArgs.gas.toString(16)}` as `0x${string}`),\n\t\t\t// gasPrice: viemArgs.gasPrice && `0x${viemArgs.gasPrice.toString(16)}` as `0x${string}`,\n\t\t\tmaxFeePerGas: viemArgs.maxFeePerGas && (`0x${viemArgs.maxFeePerGas.toString(16)}` as `0x${string}`),\n\t\t\tmaxPriorityFeePerGas:\n\t\t\t\tviemArgs.maxPriorityFeePerGas && (`0x${viemArgs.maxPriorityFeePerGas.toString(16)}` as `0x${string}`),\n\t\t\t// nonce: viemArgs.nonce && (`0x${viemArgs.nonce.toString(16)}` as `0x${string}`),\n\t\t};\n\t\tif (viemArgs.value) {\n\t\t\ttxParam.value = `0x${viemArgs.value?.toString(16)}` as `0x${string}`;\n\t\t}\n\n\t\tlet txHash: `0x${string}`;\n\t\tif (signer.type === 'wallet' || signer.type === 'remote') {\n\t\t\ttxHash = await signer.signer.request({\n\t\t\t\tmethod: 'eth_sendTransaction',\n\t\t\t\tparams: [txParam],\n\t\t\t});\n\t\t} else {\n\t\t\tconst rawTx = await signer.signer.request({\n\t\t\t\tmethod: 'eth_signTransaction',\n\t\t\t\tparams: [txParam],\n\t\t\t});\n\n\t\t\ttxHash = await env.network.provider.request({\n\t\t\t\tmethod: 'eth_sendRawTransaction',\n\t\t\t\tparams: [rawTx],\n\t\t\t});\n\t\t}\n\n\t\tconst pendingExecution: PendingExecution = {\n\t\t\ttype: 'execution',\n\t\t\ttransaction: {hash: txHash, origin: address},\n\t\t\t// description, // TODO\n\t\t\t// TODO we should have the nonce, except for wallet like metamask where it is not usre you get the nonce you start with\n\t\t};\n\t\tawait env.savePendingExecution(pendingExecution);\n\t\treturn txHash;\n\t}\n\n\tasync function executeByName<\n\t\tTAbi extends Abi,\n\t\tTFunctionName extends ContractFunctionName<TAbi, 'nonpayable' | 'payable'>,\n\t\tTArgs extends ContractFunctionArgs<TAbi, 'nonpayable' | 'payable', TFunctionName> = ContractFunctionArgs<\n\t\t\tTAbi,\n\t\t\t'nonpayable' | 'payable',\n\t\t\tTFunctionName\n\t\t>\n\t>(name: string, args: ExecutionArgs<TAbi, TFunctionName, TArgs>) {\n\t\tconst deployment = env.getOrNull<TAbi>(name);\n\t\tif (!deployment) {\n\t\t\tthrow new Error(`no deployment named ${name}`);\n\t\t}\n\n\t\treturn execute(deployment, args);\n\t}\n\n\tasync function read<\n\t\tTAbi extends Abi,\n\t\tTFunctionName extends ContractFunctionName<TAbi, 'pure' | 'view'>,\n\t\tTArgs extends ContractFunctionArgs<TAbi, 'pure' | 'view', TFunctionName> = ContractFunctionArgs<\n\t\t\tTAbi,\n\t\t\t'pure' | 'view',\n\t\t\tTFunctionName\n\t\t>\n\t>(\n\t\tdeployment: Deployment<TAbi>,\n\t\targs: ReadingArgs<TAbi, TFunctionName, TArgs>\n\t): Promise<DecodeFunctionResultReturnType<TAbi, TFunctionName>> {\n\t\tconst {account, ...viemArgs} = args;\n\t\tlet address: `0x${string}` | undefined;\n\t\tif (account) {\n\t\t\tif (account.startsWith('0x')) {\n\t\t\t\taddress = account as `0x${string}`;\n\t\t\t} else {\n\t\t\t\tif (env.namedAccounts) {\n\t\t\t\t\taddress = env.namedAccounts[account];\n\t\t\t\t\tif (!address) {\n\t\t\t\t\t\tthrow new Error(`no address for ${account}`);\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tthrow new Error(`no accounts setup, cannot get address for ${account}`);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tconst artifactToUse = deployment as unknown as Artifact<TAbi>;\n\t\tconst abi = artifactToUse.abi;\n\t\tconst calldata = encodeFunctionData<TAbi, TFunctionName>({\n\t\t\tabi,\n\t\t\tfunctionName: viemArgs.functionName,\n\t\t\targs: viemArgs.args,\n\t\t} as any);\n\n\t\tconst result: `0x${string}` = (await env.network.provider.request({\n\t\t\tmethod: 'eth_call',\n\t\t\tparams: [\n\t\t\t\t{\n\t\t\t\t\tto: deployment.address,\n\t\t\t\t\ttype: '0x2',\n\t\t\t\t\tfrom: address,\n\t\t\t\t\tchainId: `0x${env.network.chain.id.toString(16)}` as `0x${string}`,\n\t\t\t\t\tdata: calldata,\n\t\t\t\t\t// value: `0x${viemArgs.value?.toString(16)}` as `0x${string}`,\n\t\t\t\t},\n\t\t\t],\n\t\t})) as `0x${string}`;\n\n\t\tconst parsed = decodeFunctionResult<TAbi, TFunctionName>({\n\t\t\tabi,\n\t\t\tfunctionName: viemArgs.functionName,\n\t\t\tdata: result,\n\t\t\targs: viemArgs.args,\n\t\t} as any);\n\n\t\treturn parsed as DecodeFunctionResultReturnType<TAbi, TFunctionName>;\n\t}\n\n\tasync function readByName<\n\t\tTAbi extends Abi,\n\t\tTFunctionName extends ContractFunctionName<TAbi, 'pure' | 'view'>,\n\t\tTArgs extends ContractFunctionArgs<TAbi, 'pure' | 'view', TFunctionName> = ContractFunctionArgs<\n\t\t\tTAbi,\n\t\t\t'pure' | 'view',\n\t\t\tTFunctionName\n\t\t>\n\t>(\n\t\tname: string,\n\t\targs: ReadingArgs<TAbi, TFunctionName, TArgs>\n\t): Promise<DecodeFunctionResultReturnType<TAbi, TFunctionName>> {\n\t\tconst deployment = env.getOrNull<TAbi>(name);\n\t\tif (!deployment) {\n\t\t\tthrow new Error(`no deployment named ${name}`);\n\t\t}\n\n\t\treturn read(deployment, args);\n\t}\n\tasync function deploy<TAbi extends Abi>(\n\t\tname: string,\n\t\targs: DeploymentConstruction<TAbi>,\n\t\toptions?: DeployOptions\n\t): Promise<Deployment<TAbi> & {updated: boolean}> {\n\t\tconst skipIfAlreadyDeployed = options && 'skipIfAlreadyDeployed' in options && options.skipIfAlreadyDeployed;\n\t\tconst allwaysOverride = options && 'allwaysOverride' in options && options.allwaysOverride;\n\n\t\tif (allwaysOverride && skipIfAlreadyDeployed) {\n\t\t\tthrow new Error(`conflicting options: \"allwaysOverride\" and \"skipIfAlreadyDeployed\"`);\n\t\t}\n\n\t\tconst existingDeployment = env.getOrNull(name);\n\t\tif (existingDeployment && skipIfAlreadyDeployed) {\n\t\t\tlogger.info(`deployment for ${name} at ${existingDeployment.address}, skipIfAlreadyDeployed: true => we skip`);\n\t\t\treturn {...(existingDeployment as Deployment<TAbi>), updated: false};\n\t\t}\n\n\t\tconst {account, artifact, ...viemArgs} = args;\n\t\tlet address: `0x${string}`;\n\t\tif (account.startsWith('0x')) {\n\t\t\taddress = account as `0x${string}`;\n\t\t} else {\n\t\t\tif (env.namedAccounts) {\n\t\t\t\taddress = env.namedAccounts[account];\n\t\t\t\tif (!address) {\n\t\t\t\t\tthrow new Error(`no address for ${account}`);\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tthrow new Error(`no accounts setup, cannot get address for ${account}`);\n\t\t\t}\n\t\t}\n\n\t\t// TODO throw specific error if artifact not found\n\t\tconst artifactToUse = (typeof artifact === 'string' ? env.artifacts[artifact] : artifact) as Artifact<TAbi>;\n\n\t\tconst bytecode = linkLibraries(artifactToUse, options?.libraries);\n\n\t\tconst abi = artifactToUse.abi;\n\n\t\tconst argsToUse = {\n\t\t\t...viemArgs,\n\t\t\taccount,\n\t\t\tabi,\n\t\t\tbytecode,\n\t\t};\n\n\t\tconst calldata = encodeDeployData(argsToUse as any); // TODO any\n\t\tconst argsData = `0x${calldata.replace(bytecode, '')}` as `0x${string}`;\n\n\t\tif (existingDeployment) {\n\t\t\tlogger.info(`existing deployment for ${name} at ${existingDeployment.address}`);\n\t\t}\n\n\t\tif (existingDeployment && !allwaysOverride) {\n\t\t\tconst previousBytecode = existingDeployment.bytecode;\n\t\t\tconst previousArgsData = existingDeployment.argsData;\n\t\t\t// we assume cbor encoding of hash at the end\n\t\t\t// TODO option to remove it, can parse metadata but would rather avoid this here\n\t\t\tconst last2Bytes = previousBytecode.slice(-4);\n\t\t\tconst cborLength = parseInt(last2Bytes, 16);\n\t\t\tconst previousBytecodeWithoutCBOR = previousBytecode.slice(0, -cborLength * 2);\n\t\t\tconst newBytecodeWithoutCBOR = bytecode.slice(0, -cborLength * 2);\n\t\t\tif (previousBytecodeWithoutCBOR === newBytecodeWithoutCBOR && previousArgsData === argsData) {\n\t\t\t\treturn {...(existingDeployment as Deployment<TAbi>), updated: false};\n\t\t\t} else {\n\t\t\t\t// logger.info(`-------------- WITHOUT CBOR---------------------`);\n\t\t\t\t// logger.info(previousBytecodeWithoutCBOR);\n\t\t\t\t// logger.info(newBytecodeWithoutCBOR);\n\t\t\t\t// logger.info(`-----------------------------------`);\n\t\t\t\t// logger.info(`-------------- ARGS DATA ---------------------`);\n\t\t\t\t// logger.info(previousArgsData);\n\t\t\t\t// logger.info(argsData);\n\t\t\t\t// logger.info(`-----------------------------------`);\n\t\t\t}\n\t\t}\n\n\t\tconst partialDeployment: PartialDeployment<TAbi> = {\n\t\t\t...artifactToUse,\n\t\t\targsData,\n\t\t\tlinkedData: options?.linkedData,\n\t\t};\n\n\t\tconst signer = env.addressSigners[address];\n\n\t\tconst chainId = `0x${env.network.chain.id.toString(16)}` as `0x${string}`;\n\t\tconst maxFeePerGas = viemArgs.maxFeePerGas && (`0x${viemArgs.maxFeePerGas.toString(16)}` as `0x${string}`);\n\t\tconst maxPriorityFeePerGas =\n\t\t\tviemArgs.maxPriorityFeePerGas && (`0x${viemArgs.maxPriorityFeePerGas.toString(16)}` as `0x${string}`);\n\n\t\tconst params: [EIP1193TransactionData] = [\n\t\t\t{\n\t\t\t\ttype: '0x2',\n\t\t\t\tfrom: address,\n\t\t\t\tchainId,\n\t\t\t\tdata: calldata,\n\t\t\t\tgas: viemArgs.gas && (`0x${viemArgs.gas.toString(16)}` as `0x${string}`),\n\t\t\t\tmaxFeePerGas,\n\t\t\t\tmaxPriorityFeePerGas,\n\t\t\t\t// gasPrice: viemArgs.gasPrice && `0x${viemArgs.gasPrice.toString(16)}` as `0x${string}`,\n\t\t\t\t// value: `0x${viemArgs.value?.toString(16)}` as `0x${string}`,\n\t\t\t\t// nonce: viemArgs.nonce && (`0x${viemArgs.nonce.toString(16)}` as `0x${string}`),\n\t\t\t},\n\t\t];\n\n\t\tlet expectedAddress: `0x${string}` | undefined = undefined;\n\t\tif (options?.deterministic) {\n\t\t\t// TODO make these configurable\n\t\t\tconst deterministicFactoryAddress = `0x4e59b44847b379578588920ca78fbf26c0b4956c`;\n\t\t\tconst deterministicFactoryDeployerAddress = `0x3fab184622dc19b6109349b94811493bf2a45362`;\n\t\t\tconst factoryDeploymentData = `0xf8a58085174876e800830186a08080b853604580600e600039806000f350fe7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe03601600081602082378035828234f58015156039578182fd5b8082525050506014600cf31ba02222222222222222222222222222222222222222222222222222222222222222a02222222222222222222222222222222222222222222222222222222222222222`;\n\n\t\t\tconst code = await env.network.provider.request({\n\t\t\t\tmethod: 'eth_getCode',\n\t\t\t\tparams: [deterministicFactoryAddress, 'latest'],\n\t\t\t});\n\t\t\tif (code === '0x') {\n\t\t\t\tconst balanceHexString = await env.network.provider.request({\n\t\t\t\t\tmethod: 'eth_getBalance',\n\t\t\t\t\tparams: [deterministicFactoryDeployerAddress, 'latest'],\n\t\t\t\t});\n\t\t\t\tconst balance = BigInt(balanceHexString);\n\t\t\t\tif (balance < 10000000000000000n) {\n\t\t\t\t\tconst need = 10000000000000000n - balance;\n\t\t\t\t\tconst balanceToSend = `0x${need.toString(16)}` as `0x${string}`;\n\t\t\t\t\tconst txHash = await broadcastTransaction(env, signer, [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\ttype: '0x2',\n\t\t\t\t\t\t\tchainId,\n\t\t\t\t\t\t\tfrom: address,\n\t\t\t\t\t\t\tto: deterministicFactoryDeployerAddress,\n\t\t\t\t\t\t\tvalue: balanceToSend,\n\t\t\t\t\t\t\tgas: `0x${BigInt(21000).toString(16)}`,\n\t\t\t\t\t\t\tmaxFeePerGas,\n\t\t\t\t\t\t\tmaxPriorityFeePerGas,\n\t\t\t\t\t\t},\n\t\t\t\t\t]);\n\t\t\t\t\tawait env.savePendingExecution({\n\t\t\t\t\t\ttype: 'execution', // TODO different type ?\n\t\t\t\t\t\ttransaction: {hash: txHash, origin: address},\n\t\t\t\t\t});\n\t\t\t\t}\n\n\t\t\t\tconst txHash = await env.network.provider.request({\n\t\t\t\t\tmethod: 'eth_sendRawTransaction',\n\t\t\t\t\tparams: [factoryDeploymentData],\n\t\t\t\t});\n\t\t\t\tawait env.savePendingExecution({\n\t\t\t\t\ttype: 'execution', // TODO different type ?\n\t\t\t\t\ttransaction: {hash: txHash, origin: address},\n\t\t\t\t});\n\t\t\t}\n\n\t\t\t// prepending the salt\n\t\t\tconst salt = (\n\t\t\t\ttypeof options.deterministic === 'string'\n\t\t\t\t\t? `0x${options.deterministic.slice(2).padStart(64, '0')}`\n\t\t\t\t\t: '0x0000000000000000000000000000000000000000000000000000000000000000'\n\t\t\t) as `0x${string}`;\n\n\t\t\tconst bytecode = params[0].data || '0x';\n\n\t\t\texpectedAddress = ('0x' +\n\t\t\t\tkeccak256(`0xff${deterministicFactoryAddress.slice(2)}${salt.slice(2)}${keccak256(bytecode).slice(2)}`).slice(\n\t\t\t\t\t-40\n\t\t\t\t)) as `0x${string}`;\n\n\t\t\tconst codeAlreadyDeployed = await env.network.provider.request({\n\t\t\t\tmethod: 'eth_getCode',\n\t\t\t\tparams: [expectedAddress, 'latest'],\n\t\t\t});\n\n\t\t\tif (codeAlreadyDeployed !== '0x') {\n\t\t\t\tenv.showMessage(`contract was already deterministically deployed at ${expectedAddress}`);\n\t\t\t\tconst deployment = await env.save(name, {\n\t\t\t\t\taddress: expectedAddress,\n\t\t\t\t\t...partialDeployment,\n\t\t\t\t});\n\t\t\t\treturn {...(deployment as Deployment<TAbi>), updated: true};\n\t\t\t}\n\n\t\t\tparams[0].data = (salt + (bytecode.slice(2) || '')) as `0x${string}`;\n\t\t\tparams[0].to = deterministicFactoryAddress;\n\t\t}\n\n\t\tconst txHash = await broadcastTransaction(env, signer, params);\n\n\t\tconst pendingDeployment: PendingDeployment<TAbi> = {\n\t\t\ttype: 'deployment',\n\t\t\texpectedAddress,\n\t\t\tpartialDeployment,\n\t\t\ttransaction: {hash: txHash, origin: address},\n\t\t\tname,\n\t\t\t// TODO we should have the nonce, except for wallet like metamask where it is not usre you get the nonce you start with\n\t\t};\n\t\tconst deployment = await env.savePendingDeployment(pendingDeployment);\n\t\treturn {...(deployment as Deployment<TAbi>), updated: true};\n\t}\n\n\tenv.deploy = deploy;\n\tenv.execute = execute;\n\tenv.executeByName = executeByName;\n\tenv.read = read;\n\tenv.readByName = readByName;\n\treturn env;\n});\n"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@rocketh/deploy",
|
|
3
|
-
"version": "0.10.
|
|
3
|
+
"version": "0.10.7",
|
|
4
4
|
"description": "provide deploy function for rocketh",
|
|
5
5
|
"publishConfig": {
|
|
6
6
|
"access": "public"
|
|
@@ -20,23 +20,22 @@
|
|
|
20
20
|
}
|
|
21
21
|
},
|
|
22
22
|
"devDependencies": {
|
|
23
|
-
"abitype": "^1.0.
|
|
23
|
+
"abitype": "^1.0.4",
|
|
24
24
|
"eip-1193": "^0.5.0",
|
|
25
|
-
"pkgroll": "^2.
|
|
26
|
-
"rimraf": "^5.0.
|
|
27
|
-
"typescript": "^5.
|
|
28
|
-
"rocketh": "0.10.
|
|
25
|
+
"pkgroll": "^2.1.1",
|
|
26
|
+
"rimraf": "^5.0.7",
|
|
27
|
+
"typescript": "^5.5.2",
|
|
28
|
+
"rocketh": "0.10.14"
|
|
29
29
|
},
|
|
30
30
|
"peerDependencies": {
|
|
31
|
-
"rocketh": "0.10.
|
|
31
|
+
"rocketh": "0.10.14"
|
|
32
32
|
},
|
|
33
33
|
"dependencies": {
|
|
34
34
|
"named-logs": "^0.2.4",
|
|
35
|
-
"viem": "^2.
|
|
35
|
+
"viem": "^2.16.2"
|
|
36
36
|
},
|
|
37
37
|
"scripts": {
|
|
38
38
|
"build": "rimraf dist && pkgroll --sourcemap",
|
|
39
|
-
"dev": "pkgroll --watch"
|
|
40
|
-
"dev-no-reset": "tsup src/index.ts --dts --format esm,cjs --watch"
|
|
39
|
+
"dev": "pkgroll --watch"
|
|
41
40
|
}
|
|
42
41
|
}
|
package/src/index.ts
CHANGED
|
@@ -12,6 +12,7 @@ import type {
|
|
|
12
12
|
} from 'rocketh';
|
|
13
13
|
import {extendEnvironment} from 'rocketh';
|
|
14
14
|
import {
|
|
15
|
+
Address,
|
|
15
16
|
Chain,
|
|
16
17
|
ContractFunctionArgs,
|
|
17
18
|
ContractFunctionName,
|
|
@@ -21,6 +22,7 @@ import {
|
|
|
21
22
|
WriteContractParameters,
|
|
22
23
|
decodeFunctionResult,
|
|
23
24
|
encodeFunctionData,
|
|
25
|
+
encodePacked,
|
|
24
26
|
keccak256,
|
|
25
27
|
} from 'viem';
|
|
26
28
|
import {DeployContractParameters, encodeDeployData} from 'viem';
|
|
@@ -120,7 +122,11 @@ export type ReadingArgs<
|
|
|
120
122
|
account?: string;
|
|
121
123
|
};
|
|
122
124
|
|
|
123
|
-
export type DeployOptions = {
|
|
125
|
+
export type DeployOptions = {
|
|
126
|
+
linkedData?: any;
|
|
127
|
+
deterministic?: boolean | `0x${string}`;
|
|
128
|
+
libraries?: {[name: string]: Address};
|
|
129
|
+
} & (
|
|
124
130
|
| {
|
|
125
131
|
skipIfAlreadyDeployed?: boolean;
|
|
126
132
|
}
|
|
@@ -152,6 +158,69 @@ async function broadcastTransaction(
|
|
|
152
158
|
}
|
|
153
159
|
}
|
|
154
160
|
|
|
161
|
+
function linkRawLibrary(bytecode: string, libraryName: string, libraryAddress: string): string {
|
|
162
|
+
const address = libraryAddress.replace('0x', '');
|
|
163
|
+
let encodedLibraryName;
|
|
164
|
+
if (libraryName.startsWith('$') && libraryName.endsWith('$')) {
|
|
165
|
+
encodedLibraryName = libraryName.slice(1, libraryName.length - 1);
|
|
166
|
+
} else {
|
|
167
|
+
encodedLibraryName = keccak256(encodePacked(['string'], [libraryName])).slice(2, 36);
|
|
168
|
+
}
|
|
169
|
+
const pattern = new RegExp(`_+\\$${encodedLibraryName}\\$_+`, 'g');
|
|
170
|
+
if (!pattern.exec(bytecode)) {
|
|
171
|
+
throw new Error(`Can't link '${libraryName}' (${encodedLibraryName}) in \n----\n ${bytecode}\n----\n`);
|
|
172
|
+
}
|
|
173
|
+
return bytecode.replace(pattern, address);
|
|
174
|
+
}
|
|
175
|
+
|
|
176
|
+
function linkRawLibraries(bytecode: string, libraries: {[libraryName: string]: Address}): string {
|
|
177
|
+
for (const libName of Object.keys(libraries)) {
|
|
178
|
+
const libAddress = libraries[libName];
|
|
179
|
+
bytecode = linkRawLibrary(bytecode, libName, libAddress);
|
|
180
|
+
}
|
|
181
|
+
return bytecode;
|
|
182
|
+
}
|
|
183
|
+
|
|
184
|
+
function linkLibraries(
|
|
185
|
+
artifact: {
|
|
186
|
+
bytecode: string;
|
|
187
|
+
linkReferences?: {
|
|
188
|
+
[libraryFileName: string]: {
|
|
189
|
+
[libraryName: string]: Array<{length: number; start: number}>;
|
|
190
|
+
};
|
|
191
|
+
};
|
|
192
|
+
},
|
|
193
|
+
libraries?: {[libraryName: string]: Address}
|
|
194
|
+
) {
|
|
195
|
+
let bytecode = artifact.bytecode;
|
|
196
|
+
|
|
197
|
+
if (libraries) {
|
|
198
|
+
if (artifact.linkReferences) {
|
|
199
|
+
for (const [fileName, fileReferences] of Object.entries(artifact.linkReferences)) {
|
|
200
|
+
for (const [libName, fixups] of Object.entries(fileReferences)) {
|
|
201
|
+
const addr = libraries[libName];
|
|
202
|
+
if (addr === undefined) {
|
|
203
|
+
continue;
|
|
204
|
+
}
|
|
205
|
+
|
|
206
|
+
for (const fixup of fixups) {
|
|
207
|
+
bytecode =
|
|
208
|
+
bytecode.substring(0, 2 + fixup.start * 2) +
|
|
209
|
+
addr.substring(2) +
|
|
210
|
+
bytecode.substring(2 + (fixup.start + fixup.length) * 2);
|
|
211
|
+
}
|
|
212
|
+
}
|
|
213
|
+
}
|
|
214
|
+
} else {
|
|
215
|
+
bytecode = linkRawLibraries(bytecode, libraries);
|
|
216
|
+
}
|
|
217
|
+
}
|
|
218
|
+
|
|
219
|
+
// TODO return libraries object with path name <filepath.sol>:<name> for names
|
|
220
|
+
|
|
221
|
+
return bytecode;
|
|
222
|
+
}
|
|
223
|
+
|
|
155
224
|
extendEnvironment((env: Environment) => {
|
|
156
225
|
async function execute<
|
|
157
226
|
TAbi extends Abi,
|
|
@@ -365,7 +434,8 @@ extendEnvironment((env: Environment) => {
|
|
|
365
434
|
// TODO throw specific error if artifact not found
|
|
366
435
|
const artifactToUse = (typeof artifact === 'string' ? env.artifacts[artifact] : artifact) as Artifact<TAbi>;
|
|
367
436
|
|
|
368
|
-
const bytecode = artifactToUse
|
|
437
|
+
const bytecode = linkLibraries(artifactToUse, options?.libraries);
|
|
438
|
+
|
|
369
439
|
const abi = artifactToUse.abi;
|
|
370
440
|
|
|
371
441
|
const argsToUse = {
|