{"id":49724627,"url":"https://github.com/fomoweth/createx","last_synced_at":"2026-05-09T03:47:10.272Z","repository":{"id":302712788,"uuid":"1013374813","full_name":"fomoweth/createx","owner":"fomoweth","description":"A unified factory and library for deterministic contract deployments across multiple creation patterns","archived":false,"fork":false,"pushed_at":"2025-10-30T21:15:44.000Z","size":79,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2025-10-30T22:27:00.095Z","etag":null,"topics":["create","create2","create3","eip-1167","ethereum","evm","solidity","yul"],"latest_commit_sha":null,"homepage":"","language":"Solidity","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/fomoweth.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2025-07-03T19:46:13.000Z","updated_at":"2025-10-30T21:17:27.000Z","dependencies_parsed_at":"2025-07-03T21:19:04.786Z","dependency_job_id":"7b99c397-b068-4a86-b4a9-7f0c3d0341a7","html_url":"https://github.com/fomoweth/createx","commit_stats":null,"previous_names":["fomoweth/createx"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/fomoweth/createx","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/fomoweth%2Fcreatex","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/fomoweth%2Fcreatex/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/fomoweth%2Fcreatex/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/fomoweth%2Fcreatex/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/fomoweth","download_url":"https://codeload.github.com/fomoweth/createx/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/fomoweth%2Fcreatex/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":32806687,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-08T08:22:46.396Z","status":"online","status_checked_at":"2026-05-09T02:00:06.633Z","response_time":123,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["create","create2","create3","eip-1167","ethereum","evm","solidity","yul"],"created_at":"2026-05-09T03:47:09.569Z","updated_at":"2026-05-09T03:47:10.264Z","avatar_url":"https://github.com/fomoweth.png","language":"Solidity","funding_links":[],"categories":[],"sub_categories":[],"readme":"# CreateX\n\n`CreateX` provides a comprehensive solution for deploying smart contracts using various creation opcodes and patterns, offering both a standalone library and a unified factory contract for traditional and deterministic deployment methods.\n\n## Features\n\n-   **CREATE**: Traditional contract deployment\n-   **CREATE2**: Deterministic contract deployment\n-   **CREATE3**: Chain-agnostic deterministic deployment\n-   **EIP-1167 Clone**: Minimal proxy pattern deployment\n-   **EIP-1167 CloneDeterministic**: Deterministic minimal proxy deployment\n-   **Address Prediction**: Compute contract addresses before deployment\n-   **Dual Approach**: Use as a library in your contracts or interact with the deployed factory\n\n## Directory\n\n```text\ncreatex/\n├── deployments/...\n├── script/\n│   ├── CreateX.s.sol\n│   └── Deploy.s.sol\n├── src/\n│   ├── CreateX.sol\n│   ├── CreateXFactory.sol\n│   └── ICreateXFactory.sol\n└── test/\n    ├── mocks/...\n    └── CreateXFactory.t.sol\n```\n\n## Usage\n\n### Installation\n\n```bash\nforge install fomoweth/createx\n```\n\n### Build\n\n```shell\nforge build --sizes\n```\n\n### Test\n\n```bash\n# Run all tests\nforge test\n\n# Run with detailed traces\nforge test -vvv\n\n# Run with gas reporting\nforge test --gas-report\n```\n\n### Deploy\n\n```bash\nforge script script/Deploy.s.sol:DeployScript \\\n    --broadcast \\\n    --multi \\\n    --slow \\\n    --verify \\\n    -vvvv\n```\n\n## Deployments\n\n`CreateXFactory` is deployed on the following networks:\n\n| Network      | Chain ID | Address                                                                                                                          |\n| ------------ | -------- | -------------------------------------------------------------------------------------------------------------------------------- |\n| Ethereum     | 1        | [0xfC5D1D7b066730fC403C994365205a96fE1d8Bcf](https://etherscan.io/address/0xfC5D1D7b066730fC403C994365205a96fE1d8Bcf)            |\n| Optimism     | 10       | [0xfC5D1D7b066730fC403C994365205a96fE1d8Bcf](https://optimistic.etherscan.io/address/0xfC5D1D7b066730fC403C994365205a96fE1d8Bcf) |\n| Polygon      | 137      | [0xfC5D1D7b066730fC403C994365205a96fE1d8Bcf](https://polygonscan.com/address/0xfC5D1D7b066730fC403C994365205a96fE1d8Bcf)         |\n| Base         | 8453     | [0xfC5D1D7b066730fC403C994365205a96fE1d8Bcf](https://basescan.org/address/0xfC5D1D7b066730fC403C994365205a96fE1d8Bcf)            |\n| Arbitrum One | 42161    | [0xfC5D1D7b066730fC403C994365205a96fE1d8Bcf](https://arbiscan.io/address/0xfC5D1D7b066730fC403C994365205a96fE1d8Bcf)             |\n\n---\n\n# CreateX Library\n\n\u003e A low-level library that enables deterministic contract deployments and proxy clones using various creation patterns with gas efficiency.\n\n## Library API Reference\n\n### Deployment Functions\n\n```solidity\nfunction create(bytes memory initCode) internal returns (address);\nfunction create(bytes memory initCode, uint256 value) internal returns (address);\n\nfunction create2(bytes memory initCode, bytes32 salt) internal returns (address);\nfunction create2(bytes memory initCode, bytes32 salt, uint256 value) internal returns (address);\n\nfunction create3(bytes memory initCode, bytes32 salt) internal returns (address);\nfunction create3(bytes memory initCode, bytes32 salt, uint256 value) internal returns (address);\n\nfunction clone(address implementation) internal returns (address);\nfunction clone(address implementation, uint256 value) internal returns (address);\n\nfunction cloneDeterministic(address implementation, bytes32 salt) internal returns (address);\nfunction cloneDeterministic(address implementation, bytes32 salt, uint256 value) internal returns (address);\n```\n\n### Address Prediction Functions\n\n```solidity\nfunction computeCreateAddress(uint256 nonce) internal view returns (address);\nfunction computeCreateAddress(address deployer, uint256 nonce) internal pure returns (address);\n\nfunction computeCreate2Address(bytes32 initCodeHash, bytes32 salt) internal view returns (address);\nfunction computeCreate2Address(address deployer, bytes32 initCodeHash, bytes32 salt) internal pure returns (address);\n\nfunction computeCreate3Address(bytes32 salt) internal view returns (address);\nfunction computeCreate3Address(address deployer, bytes32 salt) internal pure returns (address);\n\nfunction computeCloneDeterministicAddress(address implementation, bytes32 salt) internal view returns (address);\nfunction computeCloneDeterministicAddress(address deployer, address implementation, bytes32 salt) internal pure returns (address);\n```\n\n### Example Usage\n\nImport and use the library functions directly:\n\n```solidity\n// SPDX-License-Identifier: MIT\npragma solidity ^0.8.30;\n\nimport {CreateX} from \"lib/createx/src/CreateX.sol\";\n\ncontract MyContract {\n    function deployCreate(bytes calldata initCode) external payable returns (address) {\n        return CreateX.create(initCode, msg.value);\n    }\n\n    function deployCreate2(bytes calldata initCode, bytes32 salt) external payable returns (address) {\n        return CreateX.create2(initCode, salt, msg.value);\n    }\n\n    function deployCreate3(bytes calldata initCode, bytes32 salt) external payable returns (address) {\n        return CreateX.create3(initCode, salt, msg.value);\n    }\n\n    function deployClone(address implementation) external payable returns (address) {\n        return CreateX.clone(implementation, msg.value);\n    }\n\n    function deployCloneDeterministic(address implementation, bytes32 salt) external payable returns (address) {\n        return CreateX.cloneDeterministic(implementation, salt, msg.value);\n    }\n\n    function computeAddress(uint256 nonce) public view returns (address) {\n        return CreateX.computeCreateAddress(nonce);\n    }\n\n    function computeAddress(bytes32 initCodeHash, bytes32 salt) public view returns (address) {\n        return CreateX.computeCreate2Address(initCodeHash, salt);\n    }\n\n    function computeAddress(bytes32 salt) public view returns (address) {\n        return CreateX.computeCreate3Address(salt);\n    }\n\n    function computeAddress(address implementation, bytes32 salt) public view returns (address) {\n        return CreateX.computeCloneDeterministicAddress(implementation, salt);\n    }\n}\n```\n\n---\n\n# CreateX Factory\n\n\u003e A public deployment contract that exposes CreateX capabilities via a unified interface with salt guard.\n\n## Factory API Reference\n\n### Creation Types\n\n```solidity\nenum CreationType {\n    CREATE,              // 0 – traditional deployment\n    CREATE2,             // 1 – deterministic deployment\n    CREATE3,             // 2 – chain-agnostic deployment\n    Clone,               // 3 – EIP-1167 via CREATE\n    CloneDeterministic   // 4 – EIP-1167 via CREATE2\n}\n```\n\n### Deployment Functions\n\n```solidity\nfunction createX(\n    CreationType creationType,\n    bytes calldata initCode,\n    bytes32 salt\n) external payable returns (address);\n\nfunction create(bytes calldata initCode) external payable returns (address);\n\nfunction create2(bytes calldata initCode, bytes32 salt) external payable returns (address);\n\nfunction create3(bytes calldata initCode, bytes32 salt) external payable returns (address);\n\nfunction clone(address implementation) external payable returns (address);\n\nfunction cloneDeterministic(address implementation, bytes32 salt) external payable returns (address);\n```\n\n### Address Prediction Functions\n\n```solidity\nfunction computeCreateXAddress(CreationType creationType, bytes32 initCodeHash, bytes32 salt) external view returns (address);\n\nfunction computeCreateAddress(uint256 nonce) external view returns (address);\n\nfunction computeCreate2Address(bytes32 initCodeHash, bytes32 salt) external view returns (address);\n\nfunction computeCreate3Address(bytes32 salt) external view returns (address);\n\nfunction computeCloneDeterministicAddress(address implementation, bytes32 salt) external view returns (address);\n```\n\n### Events\n\nThe factory emits events for all deployments:\n\n```solidity\nevent ContractCreation(address indexed instance, address indexed deployer);\n\nevent ContractCreation(address indexed instance, address indexed deployer, bytes32 indexed salt);\n```\n\n### Custom Errors\n\nBoth the library and factory include comprehensive error handling:\n\n```solidity\nerror ContractCreationFailed();    // Deployment failed\nerror ProxyCreationFailed();       // CREATE3 proxy deployment failed\nerror InsufficientBalance();       // Insufficient ETH balance\nerror InvalidImplementation();     // Invalid implementation address for proxies\nerror InvalidNonce();              // Nonce exceeds EIP-2681 limit\nerror InvalidCreationType();       // Unsupported creation type (factory only)\nerror InvalidSalt();               // Salt validation failed (factory only)\n```\n\n### Example Usage\n\nImport the interface and interact with the deployed factory:\n\n```solidity\n// SPDX-License-Identifier: MIT\npragma solidity ^0.8.30;\n\nimport {ICreateXFactory} from \"lib/createx/src/ICreateXFactory.sol\";\n\ncontract MyContract {\n    ICreateXFactory public immutable factory;\n\n\tconstructor(address _factory) {\n\t\tfactory = ICreateXFactory(_factory);\n\t}\n\n    function deployCreate(bytes calldata initCode) external payable returns (address) {\n        return factory.create{value: msg.value}(initCode);\n    }\n\n    function deployCreate2(bytes calldata initCode, bytes32 salt) external payable returns (address) {\n        return factory.create2{value: msg.value}(initCode, salt);\n    }\n\n    function deployCreate3(bytes calldata initCode, bytes32 salt) external payable returns (address) {\n        return factory.create3{value: msg.value}(initCode, salt);\n    }\n\n    function deployClone(address implementation) external payable returns (address) {\n        return factory.clone{value: msg.value}(implementation);\n    }\n\n    function deployCloneDeterministic(address implementation, bytes32 salt) external payable returns (address) {\n        return factory.cloneDeterministic{value: msg.value}(implementation, salt);\n    }\n\n    function computeAddress(uint256 nonce) public view returns (address) {\n        return factory.computeCreateAddress(nonce);\n    }\n\n    function computeAddress(bytes32 initCodeHash, bytes32 salt) public view returns (address) {\n        return factory.computeCreate2Address(initCodeHash, salt);\n    }\n\n    function computeAddress(bytes32 salt) public view returns (address) {\n        return factory.computeCreate3Address(salt);\n    }\n\n    function computeAddress(address implementation, bytes32 salt) public view returns (address) {\n        return factory.computeCloneDeterministicAddress(implementation, salt);\n    }\n}\n```\n\n### Unified Deployment Interface\n\nThe factory provides a single function that supports all deployment methods:\n\n```solidity\nfunction deployCreateX(\n    ICreateXFactory.CreationType creationType,\n    bytes calldata initCode,\n    bytes32 salt\n) external payable returns (address) {\n    return factory.createX{value: msg.value}(creationType, initCode, salt);\n}\n```\n\n### Salt Validation\n\nThe factory includes built-in access control through salt validation:\n\n-   For salted deployments (CREATE2, CREATE3, CloneDeterministic), the first 20 bytes of the salt must match either:\n    -   The caller's address (for user-specific deployments)\n    -   Zero address (for open deployments)\n\n---\n\n## Acknowledgements\n\nThe following repositories served as key references during the development of this project:\n\n-   [Solady](https://github.com/Vectorized/solady)\n-   [OpenZeppelin](https://github.com/OpenZeppelin/openzeppelin-contracts)\n\n## Author\n\n-   [fomoweth](https://github.com/fomoweth)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ffomoweth%2Fcreatex","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Ffomoweth%2Fcreatex","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ffomoweth%2Fcreatex/lists"}