- Contract name:
- GenericFactory
- Optimization enabled
- true
- Compiler version
- v0.6.4+commit.1dca32f3
- Optimization runs
- 200
- EVM Version
- default
- Verified at
- 2024-08-06T07:35:17.703929Z
Contract source code
pragma solidity ^0.6.0; contract CounterfactualFactory { function _create2(bytes memory _code, bytes32 _salt) internal returns(address) { bytes memory code = _code; bytes32 salt = _salt; address addr; // solium-disable-next-line security/no-inline-assembly assembly { addr := create2(0, add(code, 0x20), mload(code), salt) if iszero(extcodesize(addr)) { revert(0, 0) } } return addr; } function _predictAddress(bytes memory _code, bytes32 _salt) internal view returns (address) { return address(bytes20(keccak256(abi.encodePacked( bytes1(0xff), address(this), _salt, keccak256(_code) )) << 0x60)); } } contract GenericFactory is CounterfactualFactory { event NewContract(address indexed addr); function predictAddress(bytes memory _code, bytes32 _salt) public view returns(address) { return predictAddressWithCall(_code, _salt, bytes("")); } function createContract(bytes memory _code, bytes32 _salt) public returns(address) { return createContractAndCall(_code, _salt, bytes("")); } function predictAddressWithCall(bytes memory _code, bytes32 _salt, bytes memory _call) public view returns(address) { return _predictAddress(_code, keccak256(abi.encodePacked(_salt, _call))); } function createContractAndCall(bytes memory _code, bytes32 _salt, bytes memory _call) public returns(address) { address addr = _create2(_code, keccak256(abi.encodePacked(_salt, _call))); emit NewContract(addr); if (_call.length > 0) { // solium-disable-next-line security/no-low-level-calls (bool success, bytes memory reason) = addr.call(_call); require(success, string(reason)); } return addr; } }
Contract ABI
[{"type":"function","stateMutability":"nonpayable","outputs":[{"type":"address","name":"","internalType":"address"}],"name":"createContract","inputs":[{"type":"bytes","name":"_code","internalType":"bytes"},{"type":"bytes32","name":"_salt","internalType":"bytes32"}]},{"type":"function","stateMutability":"nonpayable","outputs":[{"type":"address","name":"","internalType":"address"}],"name":"createContractAndCall","inputs":[{"type":"bytes","name":"_code","internalType":"bytes"},{"type":"bytes32","name":"_salt","internalType":"bytes32"},{"type":"bytes","name":"_call","internalType":"bytes"}]},{"type":"function","stateMutability":"view","outputs":[{"type":"address","name":"","internalType":"address"}],"name":"predictAddress","inputs":[{"type":"bytes","name":"_code","internalType":"bytes"},{"type":"bytes32","name":"_salt","internalType":"bytes32"}]},{"type":"function","stateMutability":"view","outputs":[{"type":"address","name":"","internalType":"address"}],"name":"predictAddressWithCall","inputs":[{"type":"bytes","name":"_code","internalType":"bytes"},{"type":"bytes32","name":"_salt","internalType":"bytes32"},{"type":"bytes","name":"_call","internalType":"bytes"}]},{"type":"event","name":"NewContract","inputs":[{"type":"address","name":"addr","indexed":true}],"anonymous":false}]
Contract Creation Code
0x608060405234801561001057600080fd5b50610794806100206000396000f3fe608060405234801561001057600080fd5b506004361061004c5760003560e01c80631dcce26514610051578063482f20241461019e5780638563a8f614610244578063bbdd8aeb146102ea575b600080fd5b6101826004803603606081101561006757600080fd5b810190602081018135600160201b81111561008157600080fd5b82018360208201111561009357600080fd5b803590602001918460018302840111600160201b831117156100b457600080fd5b91908080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525092958435959094909350604081019250602001359050600160201b81111561010e57600080fd5b82018360208201111561012057600080fd5b803590602001918460018302840111600160201b8311171561014157600080fd5b91908080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525092955061041b945050505050565b604080516001600160a01b039092168252519081900360200190f35b610182600480360360408110156101b457600080fd5b810190602081018135600160201b8111156101ce57600080fd5b8201836020820111156101e057600080fd5b803590602001918460018302840111600160201b8311171561020157600080fd5b91908080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525092955050913592506104a4915050565b6101826004803603604081101561025a57600080fd5b810190602081018135600160201b81111561027457600080fd5b82018360208201111561028657600080fd5b803590602001918460018302840111600160201b831117156102a757600080fd5b91908080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525092955050913592506104c7915050565b6101826004803603606081101561030057600080fd5b810190602081018135600160201b81111561031a57600080fd5b82018360208201111561032c57600080fd5b803590602001918460018302840111600160201b8311171561034d57600080fd5b91908080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525092958435959094909350604081019250602001359050600160201b8111156103a757600080fd5b8201836020820111156103b957600080fd5b803590602001918460018302840111600160201b831117156103da57600080fd5b91908080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152509295506104df945050505050565b600061049c8484846040516020018083815260200182805190602001908083835b6020831061045b5780518252601f19909201916020918201910161043c565b6001836020036101000a03801982511681845116808217855250505050505090500192505050604051602081830303815290604052805190602001206106df565b949350505050565b60006104c083836040518060200160405280600081525061041b565b9392505050565b60006104c08383604051806020016040528060008152505b6000806105618585856040516020018083815260200182805190602001908083835b602083106105205780518252601f199092019160209182019101610501565b6001836020036101000a0380198251168184511680821785525050505050509050019250505060405160208183030381529060405280519060200120610735565b6040519091506001600160a01b038216907f387ea218537e939551af33bbc2dd6c53b1fee55d377a0dce288258f972cb3a9c90600090a282511561049c5760006060826001600160a01b0316856040518082805190602001908083835b602083106105dd5780518252601f1990920191602091820191016105be565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d806000811461063f576040519150601f19603f3d011682016040523d82523d6000602084013e610644565b606091505b50915091508181906106d45760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b83811015610699578181015183820152602001610681565b50505050905090810190601f1680156106c65780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b505050949350505050565b8151602092830120604080516001600160f81b0319818601523060601b6021820152603581019390935260558084019290925280518084039092018252607590920190915280519101206001600160a01b031690565b815160009083908390839082906020850183f59050803b61075557600080fd5b9594505050505056fea2646970667358221220d30d7bad226f3b603fe6d87b4642d706cee02daab1e811fe1e12f76f2718be2564736f6c63430006040033
Deployed ByteCode
0x608060405234801561001057600080fd5b506004361061004c5760003560e01c80631dcce26514610051578063482f20241461019e5780638563a8f614610244578063bbdd8aeb146102ea575b600080fd5b6101826004803603606081101561006757600080fd5b810190602081018135600160201b81111561008157600080fd5b82018360208201111561009357600080fd5b803590602001918460018302840111600160201b831117156100b457600080fd5b91908080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525092958435959094909350604081019250602001359050600160201b81111561010e57600080fd5b82018360208201111561012057600080fd5b803590602001918460018302840111600160201b8311171561014157600080fd5b91908080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525092955061041b945050505050565b604080516001600160a01b039092168252519081900360200190f35b610182600480360360408110156101b457600080fd5b810190602081018135600160201b8111156101ce57600080fd5b8201836020820111156101e057600080fd5b803590602001918460018302840111600160201b8311171561020157600080fd5b91908080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525092955050913592506104a4915050565b6101826004803603604081101561025a57600080fd5b810190602081018135600160201b81111561027457600080fd5b82018360208201111561028657600080fd5b803590602001918460018302840111600160201b831117156102a757600080fd5b91908080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525092955050913592506104c7915050565b6101826004803603606081101561030057600080fd5b810190602081018135600160201b81111561031a57600080fd5b82018360208201111561032c57600080fd5b803590602001918460018302840111600160201b8311171561034d57600080fd5b91908080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525092958435959094909350604081019250602001359050600160201b8111156103a757600080fd5b8201836020820111156103b957600080fd5b803590602001918460018302840111600160201b831117156103da57600080fd5b91908080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152509295506104df945050505050565b600061049c8484846040516020018083815260200182805190602001908083835b6020831061045b5780518252601f19909201916020918201910161043c565b6001836020036101000a03801982511681845116808217855250505050505090500192505050604051602081830303815290604052805190602001206106df565b949350505050565b60006104c083836040518060200160405280600081525061041b565b9392505050565b60006104c08383604051806020016040528060008152505b6000806105618585856040516020018083815260200182805190602001908083835b602083106105205780518252601f199092019160209182019101610501565b6001836020036101000a0380198251168184511680821785525050505050509050019250505060405160208183030381529060405280519060200120610735565b6040519091506001600160a01b038216907f387ea218537e939551af33bbc2dd6c53b1fee55d377a0dce288258f972cb3a9c90600090a282511561049c5760006060826001600160a01b0316856040518082805190602001908083835b602083106105dd5780518252601f1990920191602091820191016105be565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d806000811461063f576040519150601f19603f3d011682016040523d82523d6000602084013e610644565b606091505b50915091508181906106d45760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b83811015610699578181015183820152602001610681565b50505050905090810190601f1680156106c65780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b505050949350505050565b8151602092830120604080516001600160f81b0319818601523060601b6021820152603581019390935260558084019290925280518084039092018252607590920190915280519101206001600160a01b031690565b815160009083908390839082906020850183f59050803b61075557600080fd5b9594505050505056fea2646970667358221220d30d7bad226f3b603fe6d87b4642d706cee02daab1e811fe1e12f76f2718be2564736f6c63430006040033