Keyboard shortcuts

Press or to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

NineLivesPaymaster

Git Source

State Variables

version

uint256 public version

NAME

NAME here is a concatenation of the chain id as well! We don't intend to deploy this anywhere else, but we want cross-chain signing functionality, so we reuse the domain separator to discover nonces that we supply to this contract relative to the chain id here.

string constant NAME = "NineLivesPaymaster"

USDC

IERC20 public USDC

INITIAL_CHAIN_ID

uint256 public INITIAL_CHAIN_ID

INITIAL_SALT

bytes32 public INITIAL_SALT

ADMIN

address public ADMIN

STARGATE

IStargate public STARGATE

nonces

mapping(bytes32 domain => mapping(address addr => uint256 nonce)) public nonces

domainSeparators

mapping(uint256 => bytes32) public domainSeparators

CAMELOT_SWAP_ROUTER

ICamelotSwapRouter public CAMELOT_SWAP_ROUTER

WETH

IWETH10 public WETH

Functions

initialise

function initialise(
    address _erc20,
    address _admin,
    IStargate _stargate,
    ICamelotSwapRouter _swapRouter,
    IWETH10 _weth
) external;

NEW_DOMAIN_SEPARATOR

function NEW_DOMAIN_SEPARATOR(uint256 _chainId) internal returns (bytes32 sep);

computeDomainSeparator

function computeDomainSeparator(uint256 _chainId) public view returns (bytes32);

recoverAddress

function recoverAddress(bytes32 domain, Operation calldata op) public view returns (address recovered);

recoverAddressNewChain

function recoverAddressNewChain(Operation calldata op) public returns (bytes32 domain, address recovered);

stargateSendAmount

function stargateSendAmount(SendParam memory _sendParam, MessagingFee memory _messagingFee, Operation memory _op)
    internal
    returns (uint256, bool);

execute

function execute(Operation calldata op) internal returns (uint256, bool);

multicall

function multicall(Operation[] calldata operations) external returns (bool[] memory statuses);

drain

function drain(address _recipient) external;

changeAdmin

function changeAdmin(address _admin) external;

receive

receive() external payable;

Events

PaymasterPaidFor

event PaymasterPaidFor(
    address indexed owner,
    uint256 indexed maximumFee,
    uint256 indexed amountToSpend,
    uint256 feeTaken,
    address referrer,
    bytes8 outcome
);

StargateBridged

event StargateBridged(
    bytes32 indexed guid,
    address indexed spender,
    uint256 indexed amountReceived,
    uint256 amountFee,
    uint32 destinationEid
);

Errors

MulticallFailure

error MulticallFailure(uint256);