InstantLayer Contract (Options)

InstantLayer is Symmio’s meta-transaction router, built to allow Party A and Party B participants to submit pre-signed operations for gas-free execution. It securely bridges off-chain intent signing with on-chain execution through EIP-712 signatures and structured batching.

The contract also supports workflow templates, where predefined sequences of operations can be reused with dynamic inputs.

Key Features

  • EIP-712 meta-tx support with salt-based replay protection

  • Nonce ordering for increased signature safety

  • Result chaining between template steps

  • Standalone batch execution for unrelated ops

  • Operator & admin roles for access control

  • Instant-mode toggling for Party A automation

Core Functions

🔹 Registration

function registerPartyB(address partyB) external;
function unregisterPartyB(address partyB) external;

Manages execution privileges for Party B actors. Assigns or revokes OPERATOR_ROLE.

function registerMultiAccount(address multi) external;
function unregisterMultiAccount(address multi) external;

Whitelists or removes a MultiAccount contract.

🔹 Template Management

function addTemplate(string calldata name, Operation[] calldata ops) external;

Creates a reusable operation sequence (workflow template). Assigns a sequential templateId.

function setTemplateActive(uint256 templateId, bool active) external;

Enables or disables existing templates without removing them.

🔹 Execution

function executeTemplate(
    uint256 templateId,
    SignedOperation[] calldata signedOps
) external;

Executes a template-based workflow. Verifies all signatures and steps. Allows result chaining between operations. Fully reverts on failure.

function executeBatch(SignedOperation[] calldata signedOps) external;

Executes unrelated, independently signed operations in a batch. All must succeed.

🔹 Signature Utilities

function getOperationHash(SignedOperation calldata op) public view returns (bytes32);

Returns the EIP-712 domain-separated hash that off-chain signers must sign.

function domainSeparator() public view returns (bytes32);

Exposes the domain separator used in signature generation.

Last updated