# ICreateX

[Git Source](https://github.com/Ion-Protocol/nucleus-boring-vault/blob/cc0b494b83e17b9b169a73b96050d2810b690477/src/interfaces/ICreateX.sol)

**Author:** pcaversaccio (<https://web.archive.org/web/20230921103111/https://pcaversaccio.com/>)

## Functions

### deployCreate

```solidity
function deployCreate(bytes memory initCode) external payable returns (address newContract);
```

### deployCreateAndInit

```solidity
function deployCreateAndInit(
    bytes memory initCode,
    bytes memory data,
    Values memory values,
    address refundAddress
)
    external
    payable
    returns (address newContract);
```

### deployCreateAndInit

```solidity
function deployCreateAndInit(
    bytes memory initCode,
    bytes memory data,
    Values memory values
)
    external
    payable
    returns (address newContract);
```

### deployCreateClone

```solidity
function deployCreateClone(address implementation, bytes memory data) external payable returns (address proxy);
```

### computeCreateAddress

```solidity
function computeCreateAddress(address deployer, uint256 nonce) external view returns (address computedAddress);
```

### computeCreateAddress

```solidity
function computeCreateAddress(uint256 nonce) external view returns (address computedAddress);
```

### deployCreate2

```solidity
function deployCreate2(bytes32 salt, bytes memory initCode) external payable returns (address newContract);
```

### deployCreate2

```solidity
function deployCreate2(bytes memory initCode) external payable returns (address newContract);
```

### deployCreate2AndInit

```solidity
function deployCreate2AndInit(
    bytes32 salt,
    bytes memory initCode,
    bytes memory data,
    Values memory values,
    address refundAddress
)
    external
    payable
    returns (address newContract);
```

### deployCreate2AndInit

```solidity
function deployCreate2AndInit(
    bytes32 salt,
    bytes memory initCode,
    bytes memory data,
    Values memory values
)
    external
    payable
    returns (address newContract);
```

### deployCreate2AndInit

```solidity
function deployCreate2AndInit(
    bytes memory initCode,
    bytes memory data,
    Values memory values,
    address refundAddress
)
    external
    payable
    returns (address newContract);
```

### deployCreate2AndInit

```solidity
function deployCreate2AndInit(
    bytes memory initCode,
    bytes memory data,
    Values memory values
)
    external
    payable
    returns (address newContract);
```

### deployCreate2Clone

```solidity
function deployCreate2Clone(
    bytes32 salt,
    address implementation,
    bytes memory data
)
    external
    payable
    returns (address proxy);
```

### deployCreate2Clone

```solidity
function deployCreate2Clone(address implementation, bytes memory data) external payable returns (address proxy);
```

### computeCreate2Address

```solidity
function computeCreate2Address(
    bytes32 salt,
    bytes32 initCodeHash,
    address deployer
)
    external
    pure
    returns (address computedAddress);
```

### computeCreate2Address

```solidity
function computeCreate2Address(bytes32 salt, bytes32 initCodeHash) external view returns (address computedAddress);
```

### deployCreate3

```solidity
function deployCreate3(bytes32 salt, bytes memory initCode) external payable returns (address newContract);
```

### deployCreate3

```solidity
function deployCreate3(bytes memory initCode) external payable returns (address newContract);
```

### deployCreate3AndInit

```solidity
function deployCreate3AndInit(
    bytes32 salt,
    bytes memory initCode,
    bytes memory data,
    Values memory values,
    address refundAddress
)
    external
    payable
    returns (address newContract);
```

### deployCreate3AndInit

```solidity
function deployCreate3AndInit(
    bytes32 salt,
    bytes memory initCode,
    bytes memory data,
    Values memory values
)
    external
    payable
    returns (address newContract);
```

### deployCreate3AndInit

```solidity
function deployCreate3AndInit(
    bytes memory initCode,
    bytes memory data,
    Values memory values,
    address refundAddress
)
    external
    payable
    returns (address newContract);
```

### deployCreate3AndInit

```solidity
function deployCreate3AndInit(
    bytes memory initCode,
    bytes memory data,
    Values memory values
)
    external
    payable
    returns (address newContract);
```

### computeCreate3Address

```solidity
function computeCreate3Address(bytes32 salt, address deployer) external pure returns (address computedAddress);
```

### computeCreate3Address

```solidity
function computeCreate3Address(bytes32 salt) external view returns (address computedAddress);
```

## Events

### ContractCreation

```solidity
event ContractCreation(address indexed newContract, bytes32 indexed salt);
```

### ContractCreation

```solidity
event ContractCreation(address indexed newContract);
```

### Create3ProxyContractCreation

```solidity
event Create3ProxyContractCreation(address indexed newContract, bytes32 indexed salt);
```

## Errors

### FailedContractCreation

```solidity
error FailedContractCreation(address emitter);
```

### FailedContractInitialisation

```solidity
error FailedContractInitialisation(address emitter, bytes revertData);
```

### InvalidSalt

```solidity
error InvalidSalt(address emitter);
```

### InvalidNonceValue

```solidity
error InvalidNonceValue(address emitter);
```

### FailedEtherTransfer

```solidity
error FailedEtherTransfer(address emitter, bytes revertData);
```

## Structs

### Values

```solidity
struct Values {
    uint256 constructorAmount;
    uint256 initCallAmount;
}
```
