{"_id":"@arbitrum/genesis-file-generator","_rev":"4-67b8447baddd1dc21d5d8af919ea4d87","name":"@arbitrum/genesis-file-generator","dist-tags":{"latest":"0.0.5"},"versions":{"0.0.1":{"name":"@arbitrum/genesis-file-generator","version":"0.0.1","license":"Apache 2.0","_id":"@arbitrum/genesis-file-generator@0.0.1","maintainers":[{"name":"hkalodner","email":"harry@offchainlabs.com"},{"name":"spsjvc","email":"dragisaspasojevic@gmail.com"},{"name":"gzeon","email":"im@gzeon.dev"}],"dist":{"shasum":"06c24aa48510c50d0b2c96381bf85ad0087e807e","tarball":"https://registry.npmjs.org/@arbitrum/genesis-file-generator/-/genesis-file-generator-0.0.1.tgz","fileCount":9,"integrity":"sha512-/w8slJCWlrNpNSAIJaesV6X1RV5shUhrsQG2+5VN18wNrzh3zTNwvGG3NbAOFlplh/f5Ovk3u44ig3V/7llZhQ==","signatures":[{"sig":"MEQCIDasr4NGuwHVCc3UfEfgnVY8mONbk/2EUj8zHoezG6gQAiBlXppdJjuqLGNGHEiUSmvTDB5zCaFv2ecghf1AckCgVA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":715752},"type":"module","_from":"file:arbitrum-genesis-file-generator-0.0.1.tgz","types":"./dist/generate.d.ts","engines":{"node":">=24"},"exports":{".":{"types":"./dist/generate.d.ts","import":"./dist/generate.js","default":"./dist/generate.js","require":"./dist/generate.js"}},"scripts":{"build":"rm -rf dist && tsc","generate":"dotenv -e .env -- tsx generate.ts","postbuild":"cp package.json dist","prettier:check":"prettier --check '**/*.ts'","prettier:format":"prettier --write '**/*.ts'"},"_npmUser":{"name":"spsjvc","email":"dragisaspasojevic@gmail.com"},"_resolved":"/private/var/folders/dv/nsv40zds5mbb5237809c_cw40000gn/T/0cbe9c5d70541e8ca32bcbd709dcab6d/arbitrum-genesis-file-generator-0.0.1.tgz","_integrity":"sha512-/w8slJCWlrNpNSAIJaesV6X1RV5shUhrsQG2+5VN18wNrzh3zTNwvGG3NbAOFlplh/f5Ovk3u44ig3V/7llZhQ==","_npmVersion":"11.17.0","description":"This repository contains a script to generate a genesis.json file and obtain the block hash and sendRoot hash necessary to create an Arbitrum chain with a set of pre-deployed contracts at genesis.","directories":{},"_nodeVersion":"24.19.0","_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.21.0","prettier":"^3.8.3","dotenv-cli":"^11.0.0","typescript":"^6.0.3","@types/node":"^25.6.0","@offchainlabs/prettier-config":"^0.3.0","@trivago/prettier-plugin-sort-imports":"^6.0.2"},"_npmOperationalInternal":{"tmp":"tmp/genesis-file-generator_0.0.1_1785934967814_0.5609904112488446","host":"s3://npm-registry-packages-npm-production"}},"0.0.2":{"name":"@arbitrum/genesis-file-generator","version":"0.0.2","license":"Apache 2.0","_id":"@arbitrum/genesis-file-generator@0.0.2","maintainers":[{"name":"hkalodner","email":"harry@offchainlabs.com"},{"name":"spsjvc","email":"dragisaspasojevic@gmail.com"},{"name":"gzeon","email":"im@gzeon.dev"}],"dist":{"shasum":"1abdc763d2771629ec11027e3b7a79a5a8c88127","tarball":"https://registry.npmjs.org/@arbitrum/genesis-file-generator/-/genesis-file-generator-0.0.2.tgz","fileCount":37,"integrity":"sha512-wJPdid/HdE8T5w2QJnn5P0Y+nPdBotXlUndFDxiet3YpL/dSANBDf+EyfROfRA3G9i3kF/RA0fZ7nhJLIFXMnw==","signatures":[{"sig":"MEUCIQDwSvz2SRxdUx8ZmSRJ1AgfJceCYB2ONDCbI/m7oByHTAIgWyRVr9xuAKrpPo56i6Sp6r//cfrMafdxpckiQvDkifg=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1539456},"type":"module","_from":"file:arbitrum-genesis-file-generator-0.0.2.tgz","types":"./dist/generate.d.ts","engines":{"node":">=24"},"exports":{".":{"types":"./dist/generate.d.ts","import":"./dist/generate.js","default":"./dist/generate.js","require":"./dist/generate.js"}},"scripts":{"build":"rm -rf dist && tsc","generate":"dotenv -e .env -- tsx generate.ts","postbuild":"cp package.json dist","prettier:check":"prettier --check '**/*.ts'","prettier:format":"prettier --write '**/*.ts'"},"_npmUser":{"name":"spsjvc","email":"dragisaspasojevic@gmail.com"},"_resolved":"/private/var/folders/dv/nsv40zds5mbb5237809c_cw40000gn/T/7044d1fdbb4af2c1fa13ce6f4e9bb8aa/arbitrum-genesis-file-generator-0.0.2.tgz","_integrity":"sha512-wJPdid/HdE8T5w2QJnn5P0Y+nPdBotXlUndFDxiet3YpL/dSANBDf+EyfROfRA3G9i3kF/RA0fZ7nhJLIFXMnw==","_npmVersion":"11.17.0","description":"This repository contains a script to generate a genesis.json file and obtain the block hash and sendRoot hash necessary to create an Arbitrum chain with a set of pre-deployed contracts at genesis.","directories":{},"_nodeVersion":"24.19.0","_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.21.0","prettier":"^3.8.3","dotenv-cli":"^11.0.0","typescript":"^6.0.3","@types/node":"^25.6.0","@offchainlabs/prettier-config":"^0.3.0","@trivago/prettier-plugin-sort-imports":"^6.0.2"},"_npmOperationalInternal":{"tmp":"tmp/genesis-file-generator_0.0.2_1785935287170_0.7498798149359887","host":"s3://npm-registry-packages-npm-production"}},"0.0.4":{"name":"@arbitrum/genesis-file-generator","version":"0.0.4","license":"Apache 2.0","_id":"@arbitrum/genesis-file-generator@0.0.4","maintainers":[{"name":"hkalodner","email":"harry@offchainlabs.com"},{"name":"spsjvc","email":"dragisaspasojevic@gmail.com"},{"name":"gzeon","email":"im@gzeon.dev"}],"dist":{"shasum":"5a96fcc37b3441c97c17e6c16b4d91b3ee75f9df","tarball":"https://registry.npmjs.org/@arbitrum/genesis-file-generator/-/genesis-file-generator-0.0.4.tgz","fileCount":37,"integrity":"sha512-iD4Jk8upjOg3D6hagxm+ZRVxj7e7E0E4Ub33MdesWnh6zgxOiAR1eUNF6500FxrXY4f9tVYYn4NYMlwyM+v77w==","signatures":[{"sig":"MEUCIQCzG1+M5TBqroR5DUHPbnnLSBdCOh1QniacO7GWcTtQmgIgS5ae7mqkwWzGV4McQ33P2y+quZBHejFmgExwaSScbaQ=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1540068},"type":"module","_from":"file:arbitrum-genesis-file-generator-0.0.4.tgz","types":"./dist/generate.d.ts","engines":{"node":">=24"},"exports":{".":{"types":"./dist/generate.d.ts","import":"./dist/generate.js","default":"./dist/generate.js","require":"./dist/generate.js"}},"scripts":{"build":"rm -rf dist && tsc","generate":"dotenv -e .env -- tsx generate.ts","postbuild":"cp package.json dist","prettier:check":"prettier --check '**/*.ts'","prettier:format":"prettier --write '**/*.ts'"},"_npmUser":{"name":"spsjvc","email":"dragisaspasojevic@gmail.com"},"_resolved":"/private/var/folders/dv/nsv40zds5mbb5237809c_cw40000gn/T/7babdba1c6e6e79e1e2b13c107ed512a/arbitrum-genesis-file-generator-0.0.4.tgz","_integrity":"sha512-iD4Jk8upjOg3D6hagxm+ZRVxj7e7E0E4Ub33MdesWnh6zgxOiAR1eUNF6500FxrXY4f9tVYYn4NYMlwyM+v77w==","_npmVersion":"11.17.0","description":"This repository contains a script to generate a genesis.json file and obtain the block hash and sendRoot hash necessary to create an Arbitrum chain with a set of pre-deployed contracts at genesis.","directories":{},"_nodeVersion":"24.19.0","_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.21.0","prettier":"^3.8.3","dotenv-cli":"^11.0.0","typescript":"^6.0.3","@types/node":"^25.6.0","@offchainlabs/prettier-config":"^0.3.0","@trivago/prettier-plugin-sort-imports":"^6.0.2"},"_npmOperationalInternal":{"tmp":"tmp/genesis-file-generator_0.0.4_1788170573138_0.3381697387263283","host":"s3://npm-registry-packages-npm-production"}},"0.0.5":{"_id":"@arbitrum/genesis-file-generator@0.0.5","dist":{"shasum":"384ccff36a54f4285259070d12762ca99a844c67","tarball":"https://registry.npmjs.org/@arbitrum/genesis-file-generator/-/genesis-file-generator-0.0.5.tgz","integrity":"sha512-ncuiNzc+eGZWp08PkCvLztYDAOdt7c7NvhLazbCfbrcKUr62sk1wwUPnVbeVS7V+xWiinEb0iE7waCjvDFR78Q==","fileCount":38,"unpackedSize":1542173,"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@arbitrum%2fgenesis-file-generator@0.0.5","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEUCIB8AosyE7paumvlDJXBilGRyXU0PDid4cKVG73n0MvYjAiEA0OVYRlY/smgwDNLQyL6rSRfoV7PME9fuwSM6tLjpisk="}]},"name":"@arbitrum/genesis-file-generator","type":"module","types":"./dist/generate.d.ts","engines":{"node":">=24"},"exports":{".":{"types":"./dist/generate.d.ts","import":"./dist/generate.js","default":"./dist/generate.js","require":"./dist/generate.js"}},"license":"Apache 2.0","scripts":{"build":"rm -rf dist && tsc","generate":"dotenv -e .env -- tsx generate.ts","postbuild":"cp package.json dist","prettier:check":"prettier --check '**/*.ts'","prettier:format":"prettier --write '**/*.ts'"},"version":"0.0.5","_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:7611584c-e5ea-4548-99d4-26fdff64df1f"},"approver":{"name":"spsjvc","email":"dragisaspasojevic@gmail.com"}},"repository":{"url":"git+https://github.com/OffchainLabs/genesis-file-generator.git"},"directories":{},"maintainers":[{"name":"hkalodner","email":"harry@offchainlabs.com"},{"name":"spsjvc","email":"dragisaspasojevic@gmail.com"},{"name":"gzeon","email":"im@gzeon.dev"}],"_nodeVersion":"26.0.0","devDependencies":{"tsx":"^4.21.0","prettier":"^3.8.3","dotenv-cli":"^11.0.0","typescript":"^6.0.3","@types/node":"^25.6.0","@offchainlabs/prettier-config":"^0.3.0","@trivago/prettier-plugin-sort-imports":"^6.0.2"},"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/genesis-file-generator_0.0.5_1788966150857_0.37640782863615163"},"_hasShrinkwrap":false}},"time":{"created":"2026-08-05T13:02:47.703Z","modified":"2026-09-09T15:02:31.382Z","0.0.1":"2026-08-05T13:02:47.964Z","0.0.2":"2026-08-05T13:08:07.359Z","0.0.4":"2026-08-31T10:02:53.307Z","0.0.5":"2026-09-09T15:02:30.961Z"},"license":"Apache 2.0","maintainers":[{"name":"hkalodner","email":"harry@offchainlabs.com"},{"name":"spsjvc","email":"dragisaspasojevic@gmail.com"},{"name":"gzeon","email":"im@gzeon.dev"}],"readme":"# Genesis.json generator\n\nThis repository contains a script to generate a genesis.json file and obtain the block hash and sendRoot hash necessary to create an Arbitrum chain with a set of pre-deployed contracts at genesis.\n\n## :exclamation: Important note about the chain config property\n\nThe genesis.json file generated in this repository contains the standard information of any regular genesis.json file used on an Ethereum chain, with the exception of the `config` property, which usually contains information about the [chain configuration](https://github.com/ethereum/go-ethereum/blob/master/params/config.go#L433). In Arbitrum chains, the chain configuration is specified in a `serializedChainConfig` property, which contains the chain configuration (the same used in a regular `config` property) as a serialized JSON string. This serialized chain configuration is used as a component to calculate the genesis blockhash of the chain.\n\nWhen creating an Arbitrum chain with a non-zero genesis state, the chain configuration is used in 2 places:\n\n- When calculating the genesis blockhash, using Nitro's [genesis-generator](https://github.com/OffchainLabs/nitro/blob/master/cmd/genesis-generator/genesis-generator.go) tool\n- When creating the chain through the RollupCreator contract\n\nUpon initialization, Nitro will use the chain configuration set on-chain (on chain creation) with the rest of the information of the genesis.json file, to obtain a genesis blockhash. It will then compare that blockhash with the one generated with Nitro's genesis-generator (which used the chain configuration directly set in the genesis.json file). For both blockhashes to match, the chain configuration must be exactly the same at the string level, including the order of fields, potential whitespace, or special characters.\n\nThis repository generates a genesis.json file with a serialized chain configuration (in `serializedChainConfig`) to match the serialized string that is usually sent to the RollupCreator contract. If the genesis.json file is generated with a different tool, special attention must be paid to also serializing the chain configuration and specifying it in a `serializedChainConfig` property of the file.\n\n## Publishing to npm\n\nManually update the `version` in `package.json` and commit the change. Then create and push a matching version tag from that commit:\n\n```shell\ngit tag v1.2.3\ngit push origin v1.2.3\n```\n\nThe publish workflow verifies that the `package.json` version matches the tag (without the `v` prefix) before staging the package on npm. A mismatch fails the workflow. A stable tag such as `v1.2.3` stages version `1.2.3` with the `latest` npm dist-tag. Prerelease tags must use `vX.Y.Z-alpha.N`, `vX.Y.Z-beta.N`, or `vX.Y.Z-rc.N` and are staged with the corresponding `alpha`, `beta`, or `rc` npm dist-tag.\n\nA successful workflow leaves the package staged and awaiting approval. A maintainer with publish access must review and approve it with two-factor authentication (2FA) before the version becomes available to install and the selected npm dist-tag is updated.\n\nCI does not modify the package version or create or push commits or tags.\n\n## How to use this repository\n\nClone the repository\n\n```shell\ngit clone https://github.com/OffchainLabs/genesis-file-generator.git\n```\n\nMake a copy of the environment variables file and set the necessary values\n\n```shell\ncp .env.example .env\n```\n\n> [!NOTE]\n> Make sure you set the correct values for the environment variables for your chain\n\nChoose one of the following options to generate the genesis file. The Docker option is the recommended path because it includes the required Foundry tooling.\n\n### Option 1: Docker\n\nBuild the image and run the generator with your `.env` file. The generated JSON is written to `genesis/genesis.json`.\n\n```shell\nmkdir -p genesis\ndocker build -t genesis-file-generator .\ndocker run --rm \\\n  --env-file .env \\\n  -v \"$(pwd)/genesis\":/app/genesis \\\n  genesis-file-generator\n```\n\n### Option 2: Shell\n\nYou must have `forge` (Foundry) and `jq` installed.\n\n```shell\n./generate.sh\n```\n\n### Option 3: Node.js\n\nUse Node.js 24 or newer for the TypeScript-based generator tooling.\n\n```shell\nnvm use\npnpm install\npnpm generate\n```\n\n### Option 4: Importing the package\n\nUse Node.js 24 or newer and install the package in your project. You must also have `forge` (Foundry) installed because the imported generator runs the Foundry script.\n\n```ts\nimport { mkdirSync, writeFileSync } from 'node:fs';\nimport { generateGenesis } from '@arbitrum/genesis-file-generator';\n\nconst genesis = generateGenesis({\n  chainId: '12345',\n  arbosVersion: '40',\n  chainOwner: '0x0000000000000000000000000000000000000000',\n  maxCodeSize: '24576',\n  maxInitCodeSize: '49152',\n  l1BaseFee: '1000000000',\n  isAnyTrust: 'false',\n  loadDefaultPredeploys: 'true',\n  enableNativeTokenSupply: 'false',\n  enableTransactionFiltering: 'false',\n});\n\nmkdirSync('genesis', { recursive: true });\nwriteFileSync('genesis/genesis.json', `${JSON.stringify(genesis, null, 2)}\\n`);\n```\n\nEach option generates a genesis.json file in `genesis/genesis.json`.\n\nTo calculate the BlockHash and SendRoot, run the genesis-generator tool from the Nitro node image separately. Keep in mind that the minimum nitro version supported is `v3.10.0`, although it's recommended to use the [latest nitro version](https://github.com/OffchainLabs/nitro/releases/latest) available. Additionally, the nitro version used to calculate these hashes must be the same version used when initializing the chain.\n\n```shell\nNITRO_NODE_IMAGE=offchainlabs/nitro-node:vX.Y.Z-abcdef\nL1_BASE_FEE=...\ndocker run --rm \\\n  -v \"$(pwd)/genesis\":/data/genesisDir \\\n  --entrypoint genesis-generator \\\n  \"$NITRO_NODE_IMAGE\" \\\n  --genesis-json-file /data/genesisDir/genesis.json \\\n  --initial-l1-base-fee \"$L1_BASE_FEE\"\n```\n\nThe script will output the genesis blockhash and sendRoot. For example:\n\n```shell\nBlockHash: 0xc8718e3eb62b1fab6ce0ee050385a545c21423a3b164a91545ad9e097fbd5341, SendRoot: 0xac8636f211d5a9a31ca310b8061eb2696d875ee2fa90f903d913677b1f027aed\n```\n\n## Environment variables\n\nThis tool supports the following environment variables:\n\n| Env variable                 | Description                                                            |\n| ---------------------------- | ---------------------------------------------------------------------- |\n| CHAIN_ID                     | Chain ID for the new chain                                             |\n| IS_ANYTRUST                  | Whether it's an Anytrust chain (true/false)                            |\n| ARBOS_VERSION                | ArbOS version to use                                                   |\n| CHAIN_OWNER                  | Chain owner address                                                    |\n| MAX_CODE_SIZE                | Maximum deployed contract code size                                    |\n| MAX_INIT_CODE_SIZE           | Maximum contract initialization code size                              |\n| L1_BASE_FEE                  | Initial L1 base fee                                                    |\n| ENABLE_NATIVE_TOKEN_SUPPLY   | Whether to enable native token supply management in ArbOS (true/false) |\n| ENABLE_TRANSACTION_FILTERING | Whether to enable transaction filtering in ArbOS (true/false)          |\n| NITRO_NODE_IMAGE             | Image used to calculate block hash and send root                       |\n| LOAD_DEFAULT_PREDEPLOYS      | Whether to include default predeploys in the genesis file (true/false) |\n| CUSTOM_ALLOC_ACCOUNT_FILE    | Path to custom alloc account file for additional predeploys (optional) |\n\n### Custom alloc file format\n\nThe `CUSTOM_ALLOC_ACCOUNT_FILE` environment variable accepts a JSON file with the following format (addresses can be with or without `0x` prefix):\n\n```json\n{\n  \"0000000000000000000000000000000000007070\": {\n    \"balance\": \"\",\n    \"nonce\": \"1\",\n    \"code\": \"0x...\",\n    \"storage\": {\n      \"0000000000000000000000000000000000000000000000000000000000000404\": \"...\"\n    }\n  }\n}\n```\n\n> [!NOTE]\n> The information in the custom alloc account file will take precedence over the information of the contracts predeployed by default, so if a custom alloc address conflicts with a default predeploy address, the script will replace the default information with the one in the custom alloc account file.\n\n## How are contracts pre-deployed\n\nThis tool uses a Foundry script to deploy all contracts to the local chain created when running the script, and then fetches information about their state to craft the genesis.json file. Contracts are deployed following the same instructions than when deploying on a live chain, usually one of these methods:\n\n- `CREATE2`\n- `CREATE`\n- Pre-signed transaction\n\n### A note about storage accesses\n\nWhen deploying a new contract, this script uses [vm.record](https://getfoundry.sh/reference/cheatcodes/record/) and [vm.accesses](https://getfoundry.sh/reference/cheatcodes/accesses) to get the storage slots that were written during the deployment operation. However, only the storage slots accessed on the deployed contract address are read.\n\nIf accesses to storage slots of any other address is needed in the future, `vm.record` and `vm.accesses` can be replaced by [vm.startStateDiffRecording](https://getfoundry.sh/reference/cheatcodes/start-state-diff-recording) and [vm.stopAndReturnStateDiff](https://getfoundry.sh/reference/cheatcodes/stop-and-return-state-diff), which return a more comprehensive diff.\n\n## Pre-deployed contracts\n\nThis section lists the contracts that are pre-deployed (i.e., loaded into state at genesis).\n\n- [Safe Singleton Factory](#safesingletonfactory-v1043)\n- [GnosisSafe v1.3.0](#gnosissafe-v130)\n- [GnosisSafeL2 v1.3.0](#gnosissafel2-v130)\n- [GnosisSafeProxyFactory v1.3.0](#gnosissafeproxyfactory-v130)\n- [MultiSend v1.3.0](#multisend-v130)\n- [MultiSendCallOnly v1.3.0](#multisendcallonly-v130)\n- [Safe v1.4.1](#safe-v141)\n- [SafeL2 v1.4.1](#safel2-v141)\n- [SafeProxyFactory v1.4.1](#safeproxyfactory-v141)\n- [MultiSend v1.4.1](#multisend-v141)\n- [MultiSendCallOnly v1.4.1](#multisendcallonly-v141)\n- [CompatibilityFallbackHandler v1.4.1](#compatibilityfallbackhandler-v141)\n- [SafeToL2Setup v1.4.1](#safetol2setup-v141)\n- [Multicall3](#multicall3)\n- [Create2Deployer](#create2deployer)\n- [CreateX](#createx)\n- [Arachnid's Deterministic Deployment Proxy](#arachnids-deterministic-deployment-proxy)\n- [Zoltu's Deterministic Deployment Proxy](#zoltus-deterministic-deployment-proxy)\n- [ERC-2470: Singleton Factory](#erc-2470-singleton-factory)\n- [ERC-1820: Pseudo-introspection Registry Contract](#erc-1820-pseudo-introspection-registry-contract)\n- [Permit2](#permit2)\n- [EAS SchemaRegistry v1.4.0](#eas-schemaregistry-v140)\n- [EAS v1.4.0](#eas-v140)\n- [ERC-4337 EntryPoint v0.6.0](#erc-4337-entrypoint-v060)\n- [ERC-4337 SenderCreator v0.6.0](#erc-4337-sendercreator-v060)\n- [ERC-4337 EntryPoint v0.7.0](#erc-4337-entrypoint-v070)\n- [ERC-4337 SenderCreator v0.7.0](#erc-4337-sendercreator-v070)\n- [ERC-4337 EntryPoint v0.8.0](#erc-4337-entrypoint-v080)\n- [ERC-4337 SenderCreator v0.8.0](#erc-4337-sendercreator-v080)\n- [ERC-4337 EntryPoint v0.9.0](#erc-4337-entrypoint-v090)\n- [ERC-4337 SenderCreator v0.9.0](#erc-4337-sendercreator-v090)\n- [ERC-4337 Safe Module Setup v0.3.0](#erc-4337-safe-module-setup-v030)\n- [ERC-4337 Safe 4337 Module v0.3.0 (for Entrypoint v0.7.0)](#erc-4337-safe-4337-module-v030-for-entrypoint-v070)\n- [Kernel v3.3 (for Entrypoint v0.7.0)](#kernel-v33-for-entrypoint-v070)\n- [KernelFactory v3.3 (for Entrypoint v0.7.0)](#kernelfactory-v33-for-entrypoint-v070)\n- [MetaFactory (FactoryStaker) v3.0](#metafactory-factorystaker-v30)\n- [ECDSAValidator v3.1 (commit 8f7fd99)](#ecdsavalidator-v31-commit-8f7fd99)\n\n### SafeSingletonFactory v1.0.43\n\nDeployed at `0x914d7Fec6aaC8cd542e72Bca78B30650d45643d7` using CREATE from the address `0xE1CB04A0fA36DdD16a06ea828007E35e1a3cBC37` and nonce 0.\n\nSource code available at https://github.com/safe-global/safe-singleton-factory/blob/v1.0.43/source/deterministic-deployment-proxy.yul .\n\nThis contract is a replica of Arachnid's Deterministic Deployment Proxy and is deployed using a key controlled by the Safe team.\n\nTo deploy this contract, you need to act as the deployer address and deploy the creation bytecode.\n\n#### How to verify the creation bytecode and the target address\n\nThis contract is compiled with a very old version of solc. To obtain the bytecode, run the following command:\n\n```\ndocker run -v .:/sources --rm ethereum/solc:0.5.8 --strict-assembly /sources/source/deterministic-deployment-proxy.yul --optimize-yul\n```\n\nBytecode:\n\n```\n0x604580600e600039806000f350fe7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe03601600081602082378035828234f58015156039578182fd5b8082525050506014600cf3\n```\n\nAlternatively, the runtime bytecode can be verified in any block explorer, for example, in [Arbiscan](https://arbiscan.io/address/0x914d7Fec6aaC8cd542e72Bca78B30650d45643d7#code).\n\nThe target address can be verified in the project's [repository](https://github.com/safe-global/safe-singleton-factory/#expected-addresses).\n\n### GnosisSafe v1.3.0\n\nDeployed at `0xd9Db270c1B5E3Bd161E8c8503c55cEABeE709552` and `0x69f4D1788e39c87893C980c06EdF4b7f686e2938` using CREATE2.\n\nSource code available at https://github.com/safe-global/safe-smart-account/blob/v1.3.0/contracts/GnosisSafe.sol .\n\nNote: there are 2 addresses where this Safe can be deployed to:\n\n- `0xd9Db270c1B5E3Bd161E8c8503c55cEABeE709552`: when using Arachnid's CREATE2 proxy (the canonical address)\n- `0x69f4D1788e39c87893C980c06EdF4b7f686e2938`: when using the safe singleton factory\n\nThis script deploys the contract to both addresses.\n\n#### How to verify the creation bytecode and the target address\n\nFollow the building instructions of the repository and obtain the creation bytecode in the artifacts json file.\n\nThe target address can be verified in the [Safe deployments](https://github.com/safe-global/safe-deployments?tab=readme-ov-file#deployments-overview) repository.\n\n### GnosisSafeL2 v1.3.0\n\nDeployed at `0x3e5c63644e683549055b9be8653de26e0b4cd36e` and `0xfb1bffC9d739B8D520DaF37dF666da4C687191EA` using CREATE2.\n\nSource code available at https://github.com/safe-global/safe-smart-account/blob/v1.3.0/contracts/GnosisSafeL2.sol .\n\nNote: there are 2 addresses where this Safe can be deployed to:\n\n- `0x3e5c63644e683549055b9be8653de26e0b4cd36e`: when using Arachnid's CREATE2 proxy (the canonical address)\n- `0xfb1bffC9d739B8D520DaF37dF666da4C687191EA`: when using the safe singleton factory\n\nThis script deploys the contract to both addresses.\n\n#### How to verify the creation bytecode and the target address\n\nFollow the building instructions of the repository and obtain the creation bytecode in the artifacts json file.\n\nThe target address can be verified in the [Safe deployments](https://github.com/safe-global/safe-deployments?tab=readme-ov-file#deployments-overview) repository.\n\n### GnosisSafeProxyFactory v1.3.0\n\nDeployed at `0xa6B71E26C5e0845f74c812102Ca7114b6a896AB2` and `0xC22834581EbC8527d974F8a1c97E1bEA4EF910BC` using CREATE2.\n\nSource code available at https://github.com/safe-global/safe-smart-account/blob/v1.3.0/contracts/proxies/GnosisSafeProxyFactory.sol .\n\nNote: there are 2 addresses where this Safe can be deployed to:\n\n- `0xa6B71E26C5e0845f74c812102Ca7114b6a896AB2`: when using Arachnid's CREATE2 proxy (the canonical address)\n- `0xC22834581EbC8527d974F8a1c97E1bEA4EF910BC`: when using the safe singleton factory\n\nThis script deploys the contract to both addresses.\n\n#### How to verify the creation bytecode and the target address\n\nFollow the building instructions of the repository and obtain the creation bytecode in the artifacts json file.\n\nThe target address can be verified in the [Safe deployments](https://github.com/safe-global/safe-deployments?tab=readme-ov-file#deployments-overview) repository.\n\n### MultiSend v1.3.0\n\nDeployed at `0xa238cbeb142c10ef7ad8442c6d1f9e89e07e7761` and `0x998739BFdAAdde7C933B942a68053933098f9EDa` using CREATE2.\n\nSource code available at https://github.com/safe-global/safe-smart-account/blob/v1.3.0/contracts/libraries/MultiSend.sol .\n\nNote: there are 2 addresses where this contract can be deployed to:\n\n- `0xa238cbeb142c10ef7ad8442c6d1f9e89e07e7761`: when using Arachnid's CREATE2 proxy (the canonical address)\n- `0x998739BFdAAdde7C933B942a68053933098f9EDa`: when using the safe singleton factory\n\nThis script deploys the contract to both addresses.\n\n#### How to verify the creation bytecode and the target address\n\nFollow the building instructions of the repository and obtain the creation bytecode in the artifacts json file.\n\nThe target address can be verified in the [Safe deployments](https://github.com/safe-global/safe-deployments?tab=readme-ov-file#deployments-overview) repository.\n\n### MultiSendCallOnly v1.3.0\n\nDeployed at `0x40a2accbd92bca938b02010e17a5b8929b49130d` and `0xA1dabEF33b3B82c7814B6D82A79e50F4AC44102B` using CREATE2.\n\nSource code available at https://github.com/safe-global/safe-smart-account/blob/v1.3.0/contracts/libraries/MultiSendCallOnly.sol .\n\nNote: there are 2 addresses where this contract can be deployed to:\n\n- `0x40a2accbd92bca938b02010e17a5b8929b49130d`: when using Arachnid's CREATE2 proxy (the canonical address)\n- `0xA1dabEF33b3B82c7814B6D82A79e50F4AC44102B`: when using the safe singleton factory\n\nThis script deploys the contract to both addresses.\n\n#### How to verify the creation bytecode and the target address\n\nFollow the building instructions of the repository and obtain the creation bytecode in the artifacts json file.\n\nThe target address can be verified in the [Safe deployments](https://github.com/safe-global/safe-deployments?tab=readme-ov-file#deployments-overview) repository.\n\n### Safe v1.4.1\n\nDeployed at `0x41675C099F32341bf84BFc5382aF534df5C7461a` using CREATE2.\n\nSource code available at https://github.com/safe-global/safe-smart-account/blob/v1.4.1/contracts/Safe.sol .\n\nThis contract is deployed using the Safe Singleton Factory.\n\n#### How to verify the creation bytecode and the target address\n\nFollow the building instructions of the repository and obtain the creation bytecode in the artifacts json file.\n\nThe target address can be verified in the [Safe deployments](https://github.com/safe-global/safe-deployments?tab=readme-ov-file#deployments-overview) repository.\n\n### SafeL2 v1.4.1\n\nDeployed at `0x29fcB43b46531BcA003ddC8FCB67FFE91900C762` using CREATE2.\n\nSource code available at https://github.com/safe-global/safe-smart-account/blob/v1.4.1/contracts/SafeL2.sol .\n\nThis contract is deployed using the Safe Singleton Factory.\n\n#### How to verify the creation bytecode and the target address\n\nFollow the building instructions of the repository and obtain the creation bytecode in the artifacts json file.\n\nThe target address can be verified in the [Safe deployments](https://github.com/safe-global/safe-deployments?tab=readme-ov-file#deployments-overview) repository.\n\n### SafeProxyFactory v1.4.1\n\nDeployed at `0x4e1DCf7AD4e460CfD30791CCC4F9c8a4f820ec67` using CREATE2.\n\nSource code available at https://github.com/safe-global/safe-smart-account/blob/v1.4.1/contracts/proxies/SafeProxyFactory.sol .\n\nThis contract is deployed using the Safe Singleton Factory.\n\n#### How to verify the creation bytecode and the target address\n\nFollow the building instructions of the repository and obtain the creation bytecode in the artifacts json file.\n\nThe target address can be verified in the [Safe deployments](https://github.com/safe-global/safe-deployments?tab=readme-ov-file#deployments-overview) repository.\n\n### MultiSend v1.4.1\n\nDeployed at `0x38869bf66a61cF6bDB996A6aE40D5853Fd43B526` using CREATE2.\n\nSource code available at https://github.com/safe-global/safe-smart-account/blob/v1.4.1/contracts/libraries/MultiSend.sol .\n\nThis contract is deployed using the Safe Singleton Factory.\n\n#### How to verify the creation bytecode and the target address\n\nFollow the building instructions of the repository and obtain the creation bytecode in the artifacts json file.\n\nThe target address can be verified in the [Safe deployments](https://github.com/safe-global/safe-deployments?tab=readme-ov-file#deployments-overview) repository.\n\n### MultiSendCallOnly v1.4.1\n\nDeployed at `0x9641d764fc13c8B624c04430C7356C1C7C8102e2` using CREATE2.\n\nSource code available at https://github.com/safe-global/safe-smart-account/blob/v1.4.1/contracts/libraries/MultiSendCallOnly.sol .\n\nThis contract is deployed using the Safe Singleton Factory.\n\n#### How to verify the creation bytecode and the target address\n\nFollow the building instructions of the repository and obtain the creation bytecode in the artifacts json file.\n\nThe target address can be verified in the [Safe deployments](https://github.com/safe-global/safe-deployments?tab=readme-ov-file#deployments-overview) repository.\n\n### CompatibilityFallbackHandler v1.4.1\n\nDeployed at `0xfd0732Dc9E303f09fCEf3a7388Ad10A83459Ec99` using CREATE2.\n\nSource code available at https://github.com/safe-global/safe-smart-account/blob/v1.4.1/contracts/handler/CompatibilityFallbackHandler.sol .\n\nThis contract is deployed using the Safe Singleton Factory.\n\n#### How to verify the creation bytecode and the target address\n\nFollow the building instructions of the repository and obtain the creation bytecode in the artifacts json file.\n\nThe target address can be verified in the [Safe deployments](https://github.com/safe-global/safe-deployments?tab=readme-ov-file#deployments-overview) repository.\n\n### SafeToL2Setup v1.4.1\n\nDeployed at `0xBD89A1CE4DDe368FFAB0eC35506eEcE0b1fFdc54` using CREATE2.\n\nSource code available at https://github.com/safe-fndn/safe-smart-account/blob/v1.4.1-3/contracts/libraries/SafeToL2Setup.sol .\n\nThis contract is deployed using the Safe Singleton Factory.\n\n> [!NOTE]\n> This contract was released after `v1.4.1` (in tag `v1.4.1-3` of the `safe-fndn` fork), but no other contract was changed in that release and all creation bytecodes and addresses still match the canonical `v1.4.1` deployments.\n\n#### How to verify the creation bytecode and the target address\n\nFollow the building instructions of the repository and obtain the creation bytecode in the artifacts json file.\n\nThe target address can be verified in the [Safe deployments](https://github.com/safe-global/safe-deployments?tab=readme-ov-file#deployments-overview) repository.\n\n### Multicall3\n\nDeployed at `0xcA11bde05977b3631167028862bE2a173976CA11` using a pre-signed transaction.\n\nSource code available at https://github.com/mds1/multicall3/blob/v3.1.0/src/Multicall3.sol .\n\n#### How to verify the pre-signed transaction, the runtime bytecode and the target address\n\nThe pre-signed transaction for this contract is available at [its repository](https://github.com/mds1/multicall3#new-deployments).\n\nAnd the runtime bytecode can be verified by following the build instructions of the repository and obtaining the runtime bytecode in the artifacts json file.\n\nNote that compiling the contract in the repository yields the same bytecode with the exception of the final IPFS metadata hash, which is different than the one that is deployed.\n\nAlternatively, the runtime bytecode can be verified in any block explorer, for example, in [Arbiscan](https://arbiscan.io/address/0xcA11bde05977b3631167028862bE2a173976CA11#code).\n\nThe target address can be verified in the project's [repository](https://github.com/mds1/multicall3/tree/v3.1.0#multicall3-contract-addresses).\n\n### Create2Deployer\n\nDeployed at `0x13b0D85CcB8bf860b6b79AF3029fCA081AE9beF2` using CREATE from the address `0x554282Cf65b42fc8fddc6041eb24ce5E8A0632Ad` and nonce 0.\n\nSource code available at https://github.com/pcaversaccio/create2deployer/blob/c7b353935fd9a55110e75fba93bad936db998957/contracts/Create2Deployer.sol .\n\nTo deploy this contract, you need to act as the deployer address and deploy the creation bytecode.\n\n#### How to verify the creation bytecode and the target address\n\nFollow the build instructions of the repository and obtain the creation bytecode in the artifacts json file.\n\nNote: when comparing bytecodes with deployed instances, keep in mind that the contracts deployed on Ethereum, Arbitrum One, or OPStack chains are different. On Ethereum and Arbitrum One they are the deprecated versions of the contract. On OPStack chains, the version they use doesn't inherit from Ownable and Pausable. The pre-deployed contract used here is compiled with the latest version of the code, and can be verified with one of the recent deployments, for example the one on [Gravity](https://explorer.gravity.xyz/address/0x13b0D85CcB8bf860b6b79AF3029fCA081AE9beF2).\n\nThe target address can be verified in the project's [repository](https://github.com/pcaversaccio/create2deployer/tree/c7b353935fd9a55110e75fba93bad936db998957#deployments-create2deployer).\n\n### CreateX\n\nDeployed at `0xba5Ed099633D3B313e4D5F7bdc1305d3c28ba5Ed` using a pre-signed transaction.\n\nSource code available at https://github.com/pcaversaccio/createx/blob/v1.0.0/src/CreateX.sol .\n\n#### How to verify the pre-signed transaction, the runtime bytecode and the target address\n\nThe pre-signed transaction for this contract is available at [its repository](https://github.com/pcaversaccio/createx/blob/v1.0.0/scripts/presigned-createx-deployment-transactions/signed_serialised_transaction_gaslimit_3000000_.json).\n\nAnd the runtime bytecode can be verified by following the build instructions of the repository and obtaining the runtime bytecode in the artifacts json file.\n\nThe target address can be verified in the project's [repository](https://github.com/pcaversaccio/createx/tree/v1.0.0#createx-deployments).\n\n### Arachnid's Deterministic Deployment Proxy\n\nDeployed at `0x4e59b44847b379578588920cA78FbF26c0B4956C` using a pre-signed transaction.\n\nSource code available at https://github.com/Arachnid/deterministic-deployment-proxy/blob/99f24d0e09d8fad7ddb5cd37333e92a8956c9783/source/deterministic-deployment-proxy.yul .\n\nThis contract is already deployed on the local chain that Foundry creates to run their scripts. So the script verifies that the existing runtime bytecode is the expected one.\n\n#### How to verify the runtime bytecode and the target address\n\nThis contract is compiled with a very old version of solc. To obtain the bytecode, run the following command:\n\n```\ndocker run -v .:/sources --rm ethereum/solc:0.5.8 --strict-assembly /sources/src/deterministic-deployment-proxy.yul --optimize-yul\n```\n\nBytecode:\n\n```\n0x604580600e600039806000f350fe7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe03601600081602082378035828234f58015156039578182fd5b8082525050506014600cf3\n```\n\nRemoving the creation component, `0x604580600e600039806000f350fe`, we are left with the runtime bytecode.\n\n```\n0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe03601600081602082378035828234f58015156039578182fd5b8082525050506014600cf3\n```\n\nAlternatively, the runtime bytecode can be verified in any block explorer, for example, in [Arbiscan](https://arbiscan.io/address/0x4e59b44847b379578588920cA78FbF26c0B4956C#code).\n\nThe target address can be verified in the project's [repository](https://github.com/Arachnid/deterministic-deployment-proxy/tree/99f24d0e09d8fad7ddb5cd37333e92a8956c9783#latest-outputs).\n\n### Zoltu's Deterministic Deployment Proxy\n\nDeployed at `0x7A0D94F55792C434d74a40883C6ed8545E406D12` using a pre-signed transaction.\n\nSource code available at https://github.com/Zoltu/deterministic-deployment-proxy/blob/v1.0.0/source/deterministic-deployment-proxy.yul .\n\n#### How to verify the pre-signed transaction, the runtime bytecode and the target address\n\nThis contract is compiled with a very old version of solc. To obtain the bytecode, run the following command:\n\n```\ndocker run -v .:/sources --rm ethereum/solc:0.5.8 --strict-assembly /sources/src/deterministic-deployment-proxy.yul --optimize-yul\n```\n\nBytecode:\n\n```\n0x601f80600e600039806000f350fe60003681823780368234f58015156014578182fd5b80825250506014600cf3\n```\n\nRemoving the creation component, `0x601f80600e600039806000f350fe`, we are left with the runtime bytecode.\n\n```\n0x60003681823780368234f58015156014578182fd5b80825250506014600cf3\n```\n\nAlternative, the runtime bytecode can be verified in any block explorer, for example, in [Arbiscan](https://arbiscan.io/address/0x7A0D94F55792C434d74a40883C6ed8545E406D12#code).\n\nThe pre-signed transaction and the target address can be verified in the project's [repository](https://github.com/Zoltu/deterministic-deployment-proxy/blob/v1.0.0/README.md#latest-outputs).\n\n### ERC-2470: Singleton Factory\n\nDeployed at `0xce0042B868300000d44A59004Da54A005ffdcf9f` using a pre-signed transaction.\n\nSource code available at https://eips.ethereum.org/EIPS/eip-2470#specification .\n\n#### How to verify the pre-signed transaction, the runtime bytecode and the target address\n\nThe pre-signed transaction for this contract is available at [the EIP description](https://eips.ethereum.org/EIPS/eip-2470#deployment-transaction).\n\nAnd the runtime bytecode can be verified in any block explorer, for example, in [Arbiscan](https://arbiscan.io/address/0xce0042B868300000d44A59004Da54A005ffdcf9f#code).\n\nThe target address can be verified in [the EIP description](https://eips.ethereum.org/EIPS/eip-2470#factory-contract-address).\n\n### ERC-1820: Pseudo-introspection Registry Contract\n\nDeployed at `0x1820a4B7618BdE71Dce8cdc73aAB6C95905faD24` using a pre-signed transaction.\n\nSource code available at https://eips.ethereum.org/EIPS/eip-1820#specification .\n\n#### How to verify the pre-signed transaction, the runtime bytecode and the target address\n\nThe pre-signed transaction for this contract is available at [the EIP description](https://eips.ethereum.org/EIPS/eip-1820#deployment-transaction).\n\nAnd the runtime bytecode can be verified in any block explorer, for example, in [Arbiscan](https://arbiscan.io/address/0x1820a4B7618BdE71Dce8cdc73aAB6C95905faD24#code).\n\nThe target address can be verified in [the EIP description](https://eips.ethereum.org/EIPS/eip-1820#registry-contract-address).\n\n### Permit2\n\nDeployed at `0x000000000022D473030F116dDEE9F6B43aC78BA3` using CREATE2.\n\nSource code available at https://github.com/Uniswap/permit2/blob/0x000000000022D473030F116dDEE9F6B43aC78BA3/src/Permit2.sol .\n\n#### How to verify the creation bytecode and the target address\n\nFollow the build instructions of the repository and obtain the creation bytecode in the artifacts json file.\n\nThe target address can be verified in the project's [repository](https://github.com/Uniswap/permit2/tree/0x000000000022D473030F116dDEE9F6B43aC78BA3) (the name of the branch is the expected address of the contract), and [Uniswap's documentation](https://docs.uniswap.org/contracts/v4/deployments).\n\n### EAS SchemaRegistry v1.4.0\n\nDeployed at `0x822B0B93BE3f3B8Da35a2E90e877C01215be8506` using CREATE2.\n\nSource code available at https://github.com/ethereum-attestation-service/eas-contracts/blob/v1.4.0/contracts/SchemaRegistry.sol .\n\n#### How to verify the creation bytecode\n\nFollow the build instructions of the repository and obtain the creation bytecode in the artifacts json file.\n\nNote that on-chain instances are deployed using CREATE, so the target address will likely be different. On-chain deployments of this contract can be found in EAS [repository](https://github.com/ethereum-attestation-service/eas-contracts#deployments).\n\n### EAS v1.4.0\n\nDeployed at `0xF4C9CCaf46A866e2c12C5Bd95A39694718044444` using CREATE2.\n\nSource code available at https://github.com/ethereum-attestation-service/eas-contracts/blob/v1.4.0/contracts/EAS.sol .\n\n#### How to verify the creation bytecode\n\nFollow the build instructions of the repository and obtain the creation bytecode in the artifacts json file.\n\nNote that on-chain instances are deployed using CREATE, so the target address will likely be different. On-chain deployments of this contract can be found in EAS [repository](https://github.com/ethereum-attestation-service/eas-contracts#deployments).\n\n### ERC-4337 Entrypoint v0.6.0\n\nDeployed at `0x5FF137D4b0FDCD49DcA30c7CF57E578a026d2789` using CREATE2.\n\nSource code available at https://github.com/eth-infinitism/account-abstraction/blob/v0.6.0/contracts/core/EntryPoint.sol .\n\n#### How to verify the creation bytecode and the target address\n\nFollow the build instructions of the repository and obtain the creation bytecode in the artifacts json file.\n\nThe target address can be verified in the project's [repository](https://github.com/eth-infinitism/account-abstraction/tree/v0.6.0/deployments).\n\n### ERC-4337 SenderCreator v0.6.0\n\nDeployed at `0x7fc98430eAEdbb6070B35B39D798725049088348` while deploying Entrypoint v0.6.0.\n\nSource code available at https://github.com/eth-infinitism/account-abstraction/blob/v0.6.0/contracts/core/SenderCreator.sol .\n\nSince this contract is created when deploying the Entrypoint, we just verify that the runtime bytecode matches the expected one.\n\n#### How to verify the runtime bytecode and the target address\n\nFollow the build instructions of the repository and obtain the runtime bytecode in the artifacts json file.\n\nNote: to match the obtained bytecode when compiling this contract, the `optimizedComilerSettings` in the `hardhat.config.ts` file must be used.\n\nThe target address can be verified in the project's [repository](https://github.com/eth-infinitism/account-abstraction/tree/v0.6.0/deployments).\n\n### ERC-4337 Entrypoint v0.7.0\n\nDeployed at `0x0000000071727De22E5E9d8BAf0edAc6f37da032` using CREATE2.\n\nSource code available at https://github.com/eth-infinitism/account-abstraction/blob/v0.7.0/contracts/core/EntryPoint.sol .\n\n#### How to verify the creation bytecode and the target address\n\nFollow the build instructions of the repository and obtain the creation bytecode in the artifacts json file.\n\nThe target address can be verified in the project's [repository](https://github.com/eth-infinitism/account-abstraction/tree/v0.7.0/deployments).\n\n### ERC-4337 SenderCreator v0.7.0\n\nDeployed at `0xEFC2c1444eBCC4Db75e7613d20C6a62fF67A167C` while deploying Entrypoint v0.7.0.\n\nSource code available at https://github.com/eth-infinitism/account-abstraction/blob/v0.7.0/contracts/core/SenderCreator.sol .\n\nSince this contract is created when deploying the Entrypoint, we just verify that the runtime bytecode matches the expected one.\n\n#### How to verify the runtime bytecode and the target address\n\nFollow the build instructions of the repository and obtain the runtime bytecode in the artifacts json file.\n\nNote: to match the obtained bytecode when compiling this contract, the `optimizedComilerSettings` in the `hardhat.config.ts` file must be used.\n\nThe target address can be verified in the project's [repository](https://github.com/eth-infinitism/account-abstraction/tree/v0.7.0/deployments).\n\n### ERC-4337 Entrypoint v0.8.0\n\nDeployed at `0x4337084d9e255ff0702461cf8895ce9e3b5ff108` using CREATE2.\n\nSource code available at https://github.com/eth-infinitism/account-abstraction/blob/v0.8.0/contracts/core/EntryPoint.sol .\n\n#### How to verify the creation bytecode and the target address\n\nFollow the build instructions of the repository and obtain the creation bytecode in the artifacts json file.\n\nThe target address can be verified in the project's [repository](https://github.com/eth-infinitism/account-abstraction/tree/v0.8.0#entrypoint-deployment).\n\n### ERC-4337 SenderCreator v0.8.0\n\nDeployed at `0x449ED7C3e6Fee6a97311d4b55475DF59C44AdD33` while deploying Entrypoint v0.8.0.\n\nSource code available at https://github.com/eth-infinitism/account-abstraction/blob/v0.8.0/contracts/core/SenderCreator.sol .\n\nSince this contract is created when deploying the Entrypoint, we just verify that the runtime bytecode matches the expected one.\n\n#### How to verify the runtime bytecode\n\nFollow the build instructions of the repository and obtain the runtime bytecode in the artifacts json file.\n\nNote that this contract contains an immutable variable set to the address of the Entrypoint. Thus, the runtime bytecode obtained after compilation will not exactly match. The immutable variable must be set to the right address before comparing it. Additionally, the final IPFS metadata hash obtained when compiling the contract will be different than the one deployed.\n\nAlternatively, the runtime bytecode can be verified in any block explorer, for example, in [Arbiscan](https://arbiscan.io/address/0x449ED7C3e6Fee6a97311d4b55475DF59C44AdD33#code).\n\n### ERC-4337 Entrypoint v0.9.0\n\nDeployed at `0x433709009B8330FDa32311DF1C2AFA402eD8D009` using CREATE2.\n\nSource code available at https://github.com/eth-infinitism/account-abstraction/blob/v0.9.0/contracts/core/EntryPoint.sol .\n\n#### How to verify the creation bytecode and the target address\n\nFollow the build instructions of the repository and obtain the creation bytecode in the artifacts json file.\n\nThe target address can be verified in the project's [repository](https://github.com/eth-infinitism/account-abstraction/releases/tag/v0.9.0).\n\n### ERC-4337 SenderCreator v0.9.0\n\nDeployed at `0x0A630a99Df908A81115A3022927Be82f9299987e` while deploying Entrypoint v0.9.0.\n\nSource code available at https://github.com/eth-infinitism/account-abstraction/blob/v0.9.0/contracts/core/SenderCreator.sol .\n\nSince this contract is created when deploying the Entrypoint, we just verify that the runtime bytecode matches the expected one.\n\n#### How to verify the runtime bytecode\n\nFollow the build instructions of the repository and obtain the runtime bytecode in the artifacts json file.\n\nNote that this contract contains an immutable variable set to the address of the Entrypoint. Thus, the runtime bytecode obtained after compilation will not exactly match. The immutable variable must be set to the right address before comparing it. Additionally, the final IPFS metadata hash obtained when compiling the contract will be different than the one deployed.\n\nAlternatively, the runtime bytecode can be verified in any block explorer, for example, in [Arbiscan](https://arbiscan.io/address/0x0A630a99Df908A81115A3022927Be82f9299987e#code).\n\n### ERC-4337 Safe Module Setup v0.3.0\n\nDeployed at `0x2dd68b007B46fBe91B9A7c3EDa5A7a1063cB5b47` using CREATE2.\n\nSource code available at https://github.com/safe-global/safe-modules/blob/4337/v0.3.0/modules/4337/contracts/SafeModuleSetup.sol .\n\n#### How to verify the creation bytecode and the target address\n\nFollow the build instructions of the repository and obtain the creation bytecode in the artifacts json file.\n\nThe target address can be verified in the project's [repository](https://github.com/safe-global/safe-modules/blob/4337/v0.3.0/modules/4337/CHANGELOG.md#supported-entrypoint).\n\n### ERC-4337 Safe 4337 Module v0.3.0 (for Entrypoint v0.7.0)\n\nDeployed at `0x75cf11467937ce3F2f357CE24ffc3DBF8fD5c226` using CREATE2.\n\nSource code available at https://github.com/safe-global/safe-modules/blob/4337/v0.3.0/modules/4337/contracts/Safe4337Module.sol .\n\nNote that this contract must always be associated with a specific Entrypoint, set in the constructor. In this case, it's Entrypoint v0.7.0.\n\n#### How to verify the creation bytecode and the target address\n\nFollow the build instructions of the repository and obtain the creation bytecode in the artifacts json file.\n\nThe target address can be verified in the project's [repository](https://github.com/safe-global/safe-modules/blob/4337/v0.3.0/modules/4337/CHANGELOG.md#supported-entrypoint).\n\n### Kernel v3.3 (for Entrypoint v0.7.0)\n\nDeployed at `0xd6CEDDe84be40893d153Be9d467CD6aD37875b28` using CREATE2.\n\nSource code available at https://github.com/zerodevapp/kernel/blob/v3.3/src/Kernel.sol .\n\nNote that this contract must always be associated with a specific Entrypoint, set in the constructor. In this case, it's the Entrypoint v0.7.0.\n\n#### How to verify the creation bytecode and the target address\n\nFollow the build instructions of the repository and obtain the creation bytecode in the artifacts json file. Note that you must build the contracts using foundry with the profile `deploy`:\n\n```shell\nFOUNDRY_PROFILE=deploy forge build\n```\n\nThe target address can be verified in the project's [repository](https://github.com/zerodevapp/kernel/#addresses).\n\n### KernelFactory v3.3 (for Entrypoint v0.7.0)\n\nDeployed at `0x2577507b78c2008Ff367261CB6285d44ba5eF2E9` using CREATE2.\n\nSource code available at https://github.com/zerodevapp/kernel/blob/v3.3/src/factory/KernelFactory.sol .\n\nNote that this contract must always be associated with a Kernel contract template that is associated with a specific Entrypoint, set in the constructor. In this case, it's the Entrypoint v0.7.0.\n\n#### How to verify the creation bytecode and the target address\n\nFollow the build instructions of the repository and obtain the creation bytecode in the artifacts json file. Note that you must build the contracts using foundry with the profile `deploy`:\n\n```shell\nFOUNDRY_PROFILE=deploy forge build\n```\n\nThe target address can be verified in the project's [repository](https://github.com/zerodevapp/kernel/#addresses).\n\n### MetaFactory (FactoryStaker) v3.0\n\nDeployed at `0xd703aaE79538628d27099B8c4f621bE4CCd142d5` using CREATE2.\n\nSource code available at https://github.com/zerodevapp/kernel/blob/v3.0/src/factory/FactoryStaker.sol .\n\n#### How to verify the creation bytecode and the target address\n\nFollow the build instructions of the repository and obtain the creation bytecode in the artifacts json file. Note that you must build the contracts using foundry with the following configuration:\n\n```toml\nvia-ir = false\noptimizer = true\nruns = 200\nsolc_version = \"0.8.24\"\nevm_version = \"paris\"\n```\n\nThe target address can be verified in the project's [repository](https://github.com/zerodevapp/kernel/#addresses).\n\n### ECDSAValidator v3.1 (commit 8f7fd99)\n\nDeployed at `0x845ADb2C711129d4f3966735eD98a9F09fC4cE57` using CREATE2.\n\nSource code available at https://github.com/zerodevapp/kernel/blob/8f7fd9946b9d351bb5be0428bf34c87bad7ed6c9/src/validator/ECDSAValidator.sol .\n\n#### How to verify the creation bytecode and the target address\n\n> [!NOTE]\n> Even though the contract address is labeled as being for v3.1, it was actually compiled with a previous commit: `8f7fd9946b9d351bb5be0428bf34c87bad7ed6c9`.\n\nFollow the build instructions of the repository and obtain the creation bytecode in the artifacts json file. Note that you must build the contracts using foundry with the following configuration:\n\n```toml\nvia-ir = true\noptimizer = true\nruns = 200\nsolc_version = \"0.8.25\"\nevm_version = \"paris\"\n```\n\nThe target address can be verified in the project's [repository](https://github.com/zerodevapp/kernel/#addresses).\n","readmeFilename":"","repository":{"url":"git+https://github.com/OffchainLabs/genesis-file-generator.git"}}