Skip to main content

Module IKeylessDeploy

Module IKeylessDeploy 

Source
Expand description

@title IKeylessDeploy @notice Interface for the KeylessDeploy system contract. @dev This contract enables deploying contracts using pre-EIP-155 transactions (Nick’s Method) with custom gas limits, solving the problem of contracts failing to deploy on MegaETH due to the different gas model.

interface IKeylessDeploy {
    error MalformedEncoding();
    error NotContractCreation();
    error NotPreEIP155();
    error NonZeroTxNonce(uint64 txNonce);
    error NoEtherTransfer();
    error InvalidSignature();
    error InsufficientBalance();
    error ContractAlreadyExists();
    error SignerNonceTooHigh(uint64 signerNonce);
    error ExecutionReverted(uint64 gasUsed, bytes output);
    error ExecutionHalted(uint64 gasUsed);
    error EmptyCodeDeployed(uint64 gasUsed);
    error NoContractCreated();
    error AddressMismatch();
    error GasLimitTooLow(uint64 txGasLimit, uint64 providedGasLimit);
    error InsufficientComputeGas(uint64 limit, uint64 used);
    error InternalError(string message);
    error NotIntercepted();
    function keylessDeploy(bytes calldata keylessDeploymentTransaction, uint256 gasLimitOverride) external returns (uint64 gasUsed, address deployedAddress, bytes memory errorData);
}

Structs§

AddressMismatch
@notice The created contract address doesn’t match the expected address. @dev This is a defensive check that should never occur. It would indicate the EVM computed a different CREATE address than keccak256(rlp([signer, 0])). If encountered, report to MegaETH team. Custom error with signature AddressMismatch() and selector 0x4cd87fb5.
ContractAlreadyExists
@notice The deploy address already has code (contract already exists). Custom error with signature ContractAlreadyExists() and selector 0xe8dc2ba5.
EmptyCodeDeployed
@notice Contract creation succeeded but returned empty bytecode. @param gasUsed The amount of gas used. Custom error with signature EmptyCodeDeployed(uint64) and selector 0x56119d3c.
ExecutionHalted
@notice The sandbox execution halted (out of gas, stack overflow, etc.). @param gasUsed The amount of gas used before halting. Custom error with signature ExecutionHalted(uint64) and selector 0xde972b6e.
ExecutionReverted
@notice The sandbox execution reverted. @param gasUsed The amount of gas used before reverting. @param output The revert output data. Custom error with signature ExecutionReverted(uint64,bytes) and selector 0xad2bd1d9.
GasLimitTooLow
@notice The gas limit override is less than the gas limit in the keyless transaction. @param txGasLimit The gas limit from the keyless transaction. @param providedGasLimit The gas limit override provided by the caller. Custom error with signature GasLimitTooLow(uint64,uint64) and selector 0xca79dfc8.
InsufficientBalance
@notice The signer does not have enough balance to cover gas + value. Custom error with signature InsufficientBalance() and selector 0xf4d678b8.
InsufficientComputeGas
@notice The remaining compute gas is insufficient to pay for the keyless deploy overhead. @param limit The configured compute gas limit. @param used The compute gas usage. Custom error with signature InsufficientComputeGas(uint64,uint64) and selector 0x3961c2b6.
InternalError
@notice Internal error during sandbox execution. @param message The error message. Custom error with signature InternalError(string) and selector 0x7a66f75e.
InvalidSignature
@notice Failed to recover signer from signature (invalid signature). Custom error with signature InvalidSignature() and selector 0x8baa579f.
MalformedEncoding
@notice The transaction data is not valid RLP encoding. Custom error with signature MalformedEncoding() and selector 0xae1270d3.
NoContractCreated
@notice Contract creation succeeded but no address was returned. @dev This is a defensive check that should never occur. It indicates an EVM implementation bug where CREATE returned success without an address. If encountered, report to MegaETH team. Custom error with signature NoContractCreated() and selector 0x27ba908e.
NoEtherTransfer
@notice The caller tried to transfer ether to this contract. Custom error with signature NoEtherTransfer() and selector 0xd253a2b0.
NonZeroTxNonce
@notice The nonce in the signed transaction is not zero. @param txNonce The nonce value in the signed transaction. Custom error with signature NonZeroTxNonce(uint64) and selector 0x0e0beabf.
NotContractCreation
@notice The transaction is not a contract creation (to address is not empty). Custom error with signature NotContractCreation() and selector 0xa54ffa77.
NotIntercepted
@notice The call was not intercepted by the EVM (called on unsupported network). Custom error with signature NotIntercepted() and selector 0x1894f076.
NotPreEIP155
@notice The transaction is not pre-EIP-155 (v must be 27 or 28). Custom error with signature NotPreEIP155() and selector 0x7831fd0b.
SignerNonceTooHigh
@notice The signer nonce is higher than allowed for keyless deploy. @param signerNonce The on-chain nonce of the recovered signer. Custom error with signature SignerNonceTooHigh(uint64) and selector 0xdc77000b.
keylessDeployCall
@notice Deploys a contract using a pre-EIP-155 signed transaction with a custom gas limit. @dev The keyless deployment transaction must be a valid RLP-encoded legacy transaction: - nonce: any value - gasPrice: any value (typically 100 gwei for Nick’s Method) - gasLimit: any value (must be <= gasLimitOverride) - to: must be empty (contract creation) - value: any value (typically 0) - data: contract creation bytecode - v: must be 27 or 28 (pre-EIP-155, no chain ID) - r: signature component - s: signature component @param keylessDeploymentTransaction The RLP-encoded pre-EIP-155 signed transaction. @param gasLimitOverride The gas limit for the inner deployment transaction. Must be >= the gas limit in the keyless transaction. @return gasUsed The amount of gas used by the deployment transaction execution. Uses uint64 to match the EVM’s native gas accounting type (max ~18 exagas). @return deployedAddress The address of the deployed contract (zero if execution failed). @return errorData ABI-encoded error if execution failed, empty bytes on success. Execution errors (ExecutionReverted, ExecutionHalted, EmptyCodeDeployed) return success with errorData populated. Validation errors revert the entire call. Function with signature keylessDeploy(bytes,uint256) and selector 0x846365d5.
keylessDeployReturn
@notice Deploys a contract using a pre-EIP-155 signed transaction with a custom gas limit. @dev The keyless deployment transaction must be a valid RLP-encoded legacy transaction: - nonce: any value - gasPrice: any value (typically 100 gwei for Nick’s Method) - gasLimit: any value (must be <= gasLimitOverride) - to: must be empty (contract creation) - value: any value (typically 0) - data: contract creation bytecode - v: must be 27 or 28 (pre-EIP-155, no chain ID) - r: signature component - s: signature component @param keylessDeploymentTransaction The RLP-encoded pre-EIP-155 signed transaction. @param gasLimitOverride The gas limit for the inner deployment transaction. Must be >= the gas limit in the keyless transaction. @return gasUsed The amount of gas used by the deployment transaction execution. Uses uint64 to match the EVM’s native gas accounting type (max ~18 exagas). @return deployedAddress The address of the deployed contract (zero if execution failed). @return errorData ABI-encoded error if execution failed, empty bytes on success. Execution errors (ExecutionReverted, ExecutionHalted, EmptyCodeDeployed) return success with errorData populated. Validation errors revert the entire call. Container type for the return parameters of the keylessDeploy(bytes,uint256) function.

Enums§

IKeylessDeployCalls
Container for all the IKeylessDeploy function calls.
IKeylessDeployErrors
Container for all the IKeylessDeploy custom errors.