Moonbase Alpha Testnet

Contract

0x81852B74f14bcD917a72dE8d46f244f6afc2235c

Overview

DEV Balance

Moonbase Alpha LogoMoonbase Alpha LogoMoonbase Alpha Logo0 DEV

More Info

Multichain Info

N/A
Transaction Hash
Method
Block
From
To
Amount

There are no matching entries

Please try again later

Parent Transaction Hash Block From To Amount
View All Internal Transactions
Loading...
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
SenderReceiver

Compiler Version
v0.8.9+commit.e5eed63a

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at moonbase.moonscan.io on 2024-02-20
*/

// File: @axelar-network/axelar-gmp-sdk-solidity/contracts/interfaces/IOwnable.sol



pragma solidity ^0.8.0;

/**
 * @title IOwnable Interface
 * @notice IOwnable is an interface that abstracts the implementation of a
 * contract with ownership control features. It's commonly used in upgradable
 * contracts and includes the functionality to get current owner, transfer
 * ownership, and propose and accept ownership.
 */
interface IOwnable {
    error NotOwner();
    error InvalidOwner();
    error InvalidOwnerAddress();

    event OwnershipTransferStarted(address indexed newOwner);
    event OwnershipTransferred(address indexed newOwner);

    /**
     * @notice Returns the current owner of the contract.
     * @return address The address of the current owner
     */
    function owner() external view returns (address);

    /**
     * @notice Returns the address of the pending owner of the contract.
     * @return address The address of the pending owner
     */
    function pendingOwner() external view returns (address);

    /**
     * @notice Transfers ownership of the contract to a new address
     * @param newOwner The address to transfer ownership to
     */
    function transferOwnership(address newOwner) external;

    /**
     * @notice Proposes to transfer the contract's ownership to a new address.
     * The new owner needs to accept the ownership explicitly.
     * @param newOwner The address to transfer ownership to
     */
    function proposeOwnership(address newOwner) external;

    /**
     * @notice Transfers ownership to the pending owner.
     * @dev Can only be called by the pending owner
     */
    function acceptOwnership() external;
}

// File: @axelar-network/axelar-gmp-sdk-solidity/contracts/interfaces/IContractIdentifier.sol



pragma solidity ^0.8.0;

// General interface for upgradable contracts
interface IContractIdentifier {
    /**
     * @notice Returns the contract ID. It can be used as a check during upgrades.
     * @dev Meant to be overridden in derived contracts.
     * @return bytes32 The contract ID
     */
    function contractId() external pure returns (bytes32);
}

// File: @axelar-network/axelar-gmp-sdk-solidity/contracts/interfaces/IImplementation.sol



pragma solidity ^0.8.0;


interface IImplementation is IContractIdentifier {
    error NotProxy();

    function setup(bytes calldata data) external;
}

// File: @axelar-network/axelar-gmp-sdk-solidity/contracts/interfaces/IUpgradable.sol



pragma solidity ^0.8.0;



// General interface for upgradable contracts
interface IUpgradable is IOwnable, IImplementation {
    error InvalidCodeHash();
    error InvalidImplementation();
    error SetupFailed();

    event Upgraded(address indexed newImplementation);

    function implementation() external view returns (address);

    function upgrade(
        address newImplementation,
        bytes32 newImplementationCodeHash,
        bytes calldata params
    ) external;
}

// File: @axelar-network/axelar-gmp-sdk-solidity/contracts/interfaces/IAxelarGasService.sol



pragma solidity ^0.8.0;


/**
 * @title IAxelarGasService Interface
 * @notice This is an interface for the AxelarGasService contract which manages gas payments
 * and refunds for cross-chain communication on the Axelar network.
 * @dev This interface inherits IUpgradable
 */
interface IAxelarGasService is IUpgradable {
    error NothingReceived();
    error InvalidAddress();
    error NotCollector();
    error InvalidAmounts();

    event GasPaidForContractCall(
        address indexed sourceAddress,
        string destinationChain,
        string destinationAddress,
        bytes32 indexed payloadHash,
        address gasToken,
        uint256 gasFeeAmount,
        address refundAddress
    );

    event GasPaidForContractCallWithToken(
        address indexed sourceAddress,
        string destinationChain,
        string destinationAddress,
        bytes32 indexed payloadHash,
        string symbol,
        uint256 amount,
        address gasToken,
        uint256 gasFeeAmount,
        address refundAddress
    );

    event NativeGasPaidForContractCall(
        address indexed sourceAddress,
        string destinationChain,
        string destinationAddress,
        bytes32 indexed payloadHash,
        uint256 gasFeeAmount,
        address refundAddress
    );

    event NativeGasPaidForContractCallWithToken(
        address indexed sourceAddress,
        string destinationChain,
        string destinationAddress,
        bytes32 indexed payloadHash,
        string symbol,
        uint256 amount,
        uint256 gasFeeAmount,
        address refundAddress
    );

    event GasPaidForExpressCall(
        address indexed sourceAddress,
        string destinationChain,
        string destinationAddress,
        bytes32 indexed payloadHash,
        address gasToken,
        uint256 gasFeeAmount,
        address refundAddress
    );

    event GasPaidForExpressCallWithToken(
        address indexed sourceAddress,
        string destinationChain,
        string destinationAddress,
        bytes32 indexed payloadHash,
        string symbol,
        uint256 amount,
        address gasToken,
        uint256 gasFeeAmount,
        address refundAddress
    );

    event NativeGasPaidForExpressCall(
        address indexed sourceAddress,
        string destinationChain,
        string destinationAddress,
        bytes32 indexed payloadHash,
        uint256 gasFeeAmount,
        address refundAddress
    );

    event NativeGasPaidForExpressCallWithToken(
        address indexed sourceAddress,
        string destinationChain,
        string destinationAddress,
        bytes32 indexed payloadHash,
        string symbol,
        uint256 amount,
        uint256 gasFeeAmount,
        address refundAddress
    );

    event GasAdded(
        bytes32 indexed txHash,
        uint256 indexed logIndex,
        address gasToken,
        uint256 gasFeeAmount,
        address refundAddress
    );

    event NativeGasAdded(bytes32 indexed txHash, uint256 indexed logIndex, uint256 gasFeeAmount, address refundAddress);

    event ExpressGasAdded(
        bytes32 indexed txHash,
        uint256 indexed logIndex,
        address gasToken,
        uint256 gasFeeAmount,
        address refundAddress
    );

    event NativeExpressGasAdded(
        bytes32 indexed txHash,
        uint256 indexed logIndex,
        uint256 gasFeeAmount,
        address refundAddress
    );

    event Refunded(
        bytes32 indexed txHash,
        uint256 indexed logIndex,
        address payable receiver,
        address token,
        uint256 amount
    );

    /**
     * @notice Pay for gas using ERC20 tokens for a contract call on a destination chain.
     * @dev This function is called on the source chain before calling the gateway to execute a remote contract.
     * @param sender The address making the payment
     * @param destinationChain The target chain where the contract call will be made
     * @param destinationAddress The target address on the destination chain
     * @param payload Data payload for the contract call
     * @param gasToken The address of the ERC20 token used to pay for gas
     * @param gasFeeAmount The amount of tokens to pay for gas
     * @param refundAddress The address where refunds, if any, should be sent
     */
    function payGasForContractCall(
        address sender,
        string calldata destinationChain,
        string calldata destinationAddress,
        bytes calldata payload,
        address gasToken,
        uint256 gasFeeAmount,
        address refundAddress
    ) external;

    /**
     * @notice Pay for gas using ERC20 tokens for a contract call with tokens on a destination chain.
     * @dev This function is called on the source chain before calling the gateway to execute a remote contract.
     * @param sender The address making the payment
     * @param destinationChain The target chain where the contract call with tokens will be made
     * @param destinationAddress The target address on the destination chain
     * @param payload Data payload for the contract call with tokens
     * @param symbol The symbol of the token to be sent with the call
     * @param amount The amount of tokens to be sent with the call
     * @param gasToken The address of the ERC20 token used to pay for gas
     * @param gasFeeAmount The amount of tokens to pay for gas
     * @param refundAddress The address where refunds, if any, should be sent
     */
    function payGasForContractCallWithToken(
        address sender,
        string calldata destinationChain,
        string calldata destinationAddress,
        bytes calldata payload,
        string calldata symbol,
        uint256 amount,
        address gasToken,
        uint256 gasFeeAmount,
        address refundAddress
    ) external;

    /**
     * @notice Pay for gas using native currency for a contract call on a destination chain.
     * @dev This function is called on the source chain before calling the gateway to execute a remote contract.
     * @param sender The address making the payment
     * @param destinationChain The target chain where the contract call will be made
     * @param destinationAddress The target address on the destination chain
     * @param payload Data payload for the contract call
     * @param refundAddress The address where refunds, if any, should be sent
     */
    function payNativeGasForContractCall(
        address sender,
        string calldata destinationChain,
        string calldata destinationAddress,
        bytes calldata payload,
        address refundAddress
    ) external payable;

    /**
     * @notice Pay for gas using native currency for a contract call with tokens on a destination chain.
     * @dev This function is called on the source chain before calling the gateway to execute a remote contract.
     * @param sender The address making the payment
     * @param destinationChain The target chain where the contract call with tokens will be made
     * @param destinationAddress The target address on the destination chain
     * @param payload Data payload for the contract call with tokens
     * @param symbol The symbol of the token to be sent with the call
     * @param amount The amount of tokens to be sent with the call
     * @param refundAddress The address where refunds, if any, should be sent
     */
    function payNativeGasForContractCallWithToken(
        address sender,
        string calldata destinationChain,
        string calldata destinationAddress,
        bytes calldata payload,
        string calldata symbol,
        uint256 amount,
        address refundAddress
    ) external payable;

    /**
     * @notice Pay for gas using ERC20 tokens for an express contract call on a destination chain.
     * @dev This function is called on the source chain before calling the gateway to express execute a remote contract.
     * @param sender The address making the payment
     * @param destinationChain The target chain where the contract call will be made
     * @param destinationAddress The target address on the destination chain
     * @param payload Data payload for the contract call
     * @param gasToken The address of the ERC20 token used to pay for gas
     * @param gasFeeAmount The amount of tokens to pay for gas
     * @param refundAddress The address where refunds, if any, should be sent
     */
    function payGasForExpressCall(
        address sender,
        string calldata destinationChain,
        string calldata destinationAddress,
        bytes calldata payload,
        address gasToken,
        uint256 gasFeeAmount,
        address refundAddress
    ) external;

    /**
     * @notice Pay for gas using ERC20 tokens for an express contract call with tokens on a destination chain.
     * @dev This function is called on the source chain before calling the gateway to express execute a remote contract.
     * @param sender The address making the payment
     * @param destinationChain The target chain where the contract call with tokens will be made
     * @param destinationAddress The target address on the destination chain
     * @param payload Data payload for the contract call with tokens
     * @param symbol The symbol of the token to be sent with the call
     * @param amount The amount of tokens to be sent with the call
     * @param gasToken The address of the ERC20 token used to pay for gas
     * @param gasFeeAmount The amount of tokens to pay for gas
     * @param refundAddress The address where refunds, if any, should be sent
     */
    function payGasForExpressCallWithToken(
        address sender,
        string calldata destinationChain,
        string calldata destinationAddress,
        bytes calldata payload,
        string calldata symbol,
        uint256 amount,
        address gasToken,
        uint256 gasFeeAmount,
        address refundAddress
    ) external;

    /**
     * @notice Pay for gas using native currency for an express contract call on a destination chain.
     * @dev This function is called on the source chain before calling the gateway to express execute a remote contract.
     * @param sender The address making the payment
     * @param destinationChain The target chain where the contract call will be made
     * @param destinationAddress The target address on the destination chain
     * @param payload Data payload for the contract call
     * @param refundAddress The address where refunds, if any, should be sent
     */
    function payNativeGasForExpressCall(
        address sender,
        string calldata destinationChain,
        string calldata destinationAddress,
        bytes calldata payload,
        address refundAddress
    ) external payable;

    /**
     * @notice Pay for gas using native currency for an express contract call with tokens on a destination chain.
     * @dev This function is called on the source chain before calling the gateway to express execute a remote contract.
     * @param sender The address making the payment
     * @param destinationChain The target chain where the contract call with tokens will be made
     * @param destinationAddress The target address on the destination chain
     * @param payload Data payload for the contract call with tokens
     * @param symbol The symbol of the token to be sent with the call
     * @param amount The amount of tokens to be sent with the call
     * @param refundAddress The address where refunds, if any, should be sent
     */
    function payNativeGasForExpressCallWithToken(
        address sender,
        string calldata destinationChain,
        string calldata destinationAddress,
        bytes calldata payload,
        string calldata symbol,
        uint256 amount,
        address refundAddress
    ) external payable;

    /**
     * @notice Add additional gas payment using ERC20 tokens after initiating a cross-chain call.
     * @dev This function can be called on the source chain after calling the gateway to execute a remote contract.
     * @param txHash The transaction hash of the cross-chain call
     * @param logIndex The log index for the cross-chain call
     * @param gasToken The ERC20 token address used to add gas
     * @param gasFeeAmount The amount of tokens to add as gas
     * @param refundAddress The address where refunds, if any, should be sent
     */
    function addGas(
        bytes32 txHash,
        uint256 logIndex,
        address gasToken,
        uint256 gasFeeAmount,
        address refundAddress
    ) external;

    /**
     * @notice Add additional gas payment using native currency after initiating a cross-chain call.
     * @dev This function can be called on the source chain after calling the gateway to execute a remote contract.
     * @param txHash The transaction hash of the cross-chain call
     * @param logIndex The log index for the cross-chain call
     * @param refundAddress The address where refunds, if any, should be sent
     */
    function addNativeGas(
        bytes32 txHash,
        uint256 logIndex,
        address refundAddress
    ) external payable;

    /**
     * @notice Add additional gas payment using ERC20 tokens after initiating an express cross-chain call.
     * @dev This function can be called on the source chain after calling the gateway to express execute a remote contract.
     * @param txHash The transaction hash of the cross-chain call
     * @param logIndex The log index for the cross-chain call
     * @param gasToken The ERC20 token address used to add gas
     * @param gasFeeAmount The amount of tokens to add as gas
     * @param refundAddress The address where refunds, if any, should be sent
     */
    function addExpressGas(
        bytes32 txHash,
        uint256 logIndex,
        address gasToken,
        uint256 gasFeeAmount,
        address refundAddress
    ) external;

    /**
     * @notice Add additional gas payment using native currency after initiating an express cross-chain call.
     * @dev This function can be called on the source chain after calling the gateway to express execute a remote contract.
     * @param txHash The transaction hash of the cross-chain call
     * @param logIndex The log index for the cross-chain call
     * @param refundAddress The address where refunds, if any, should be sent
     */
    function addNativeExpressGas(
        bytes32 txHash,
        uint256 logIndex,
        address refundAddress
    ) external payable;

    /**
     * @notice Allows the gasCollector to collect accumulated fees from the contract.
     * @dev Use address(0) as the token address for native currency.
     * @param receiver The address to receive the collected fees
     * @param tokens Array of token addresses to be collected
     * @param amounts Array of amounts to be collected for each respective token address
     */
    function collectFees(
        address payable receiver,
        address[] calldata tokens,
        uint256[] calldata amounts
    ) external;

    /**
     * @notice Refunds gas payment to the receiver in relation to a specific cross-chain transaction.
     * @dev Only callable by the gasCollector.
     * @dev Use address(0) as the token address to refund native currency.
     * @param txHash The transaction hash of the cross-chain call
     * @param logIndex The log index for the cross-chain call
     * @param receiver The address to receive the refund
     * @param token The token address to be refunded
     * @param amount The amount to refund
     */
    function refund(
        bytes32 txHash,
        uint256 logIndex,
        address payable receiver,
        address token,
        uint256 amount
    ) external;

    /**
     * @notice Returns the address of the designated gas collector.
     * @return address of the gas collector
     */
    function gasCollector() external returns (address);
}

// File: @axelar-network/axelar-gmp-sdk-solidity/contracts/interfaces/IGovernable.sol



pragma solidity ^0.8.0;

/**
 * @title IGovernable Interface
 * @notice This is an interface used by the AxelarGateway contract to manage governance and mint limiter roles.
 */
interface IGovernable {
    error NotGovernance();
    error NotMintLimiter();
    error InvalidGovernance();
    error InvalidMintLimiter();

    event GovernanceTransferred(address indexed previousGovernance, address indexed newGovernance);
    event MintLimiterTransferred(address indexed previousGovernance, address indexed newGovernance);

    /**
     * @notice Returns the governance address.
     * @return address of the governance
     */
    function governance() external view returns (address);

    /**
     * @notice Returns the mint limiter address.
     * @return address of the mint limiter
     */
    function mintLimiter() external view returns (address);

    /**
     * @notice Transfer the governance role to another address.
     * @param newGovernance The new governance address
     */
    function transferGovernance(address newGovernance) external;

    /**
     * @notice Transfer the mint limiter role to another address.
     * @param newGovernance The new mint limiter address
     */
    function transferMintLimiter(address newGovernance) external;
}

// File: @axelar-network/axelar-gmp-sdk-solidity/contracts/interfaces/IAxelarGateway.sol



pragma solidity ^0.8.0;



interface IAxelarGateway is IImplementation, IGovernable {
    /**********\
    |* Errors *|
    \**********/

    error NotSelf();
    error InvalidCodeHash();
    error SetupFailed();
    error InvalidAuthModule();
    error InvalidTokenDeployer();
    error InvalidAmount();
    error InvalidChainId();
    error InvalidCommands();
    error TokenDoesNotExist(string symbol);
    error TokenAlreadyExists(string symbol);
    error TokenDeployFailed(string symbol);
    error TokenContractDoesNotExist(address token);
    error BurnFailed(string symbol);
    error MintFailed(string symbol);
    error InvalidSetMintLimitsParams();
    error ExceedMintLimit(string symbol);

    /**********\
    |* Events *|
    \**********/

    event TokenSent(
        address indexed sender,
        string destinationChain,
        string destinationAddress,
        string symbol,
        uint256 amount
    );

    event ContractCall(
        address indexed sender,
        string destinationChain,
        string destinationContractAddress,
        bytes32 indexed payloadHash,
        bytes payload
    );

    event ContractCallWithToken(
        address indexed sender,
        string destinationChain,
        string destinationContractAddress,
        bytes32 indexed payloadHash,
        bytes payload,
        string symbol,
        uint256 amount
    );

    event Executed(bytes32 indexed commandId);

    event TokenDeployed(string symbol, address tokenAddresses);

    event ContractCallApproved(
        bytes32 indexed commandId,
        string sourceChain,
        string sourceAddress,
        address indexed contractAddress,
        bytes32 indexed payloadHash,
        bytes32 sourceTxHash,
        uint256 sourceEventIndex
    );

    event ContractCallApprovedWithMint(
        bytes32 indexed commandId,
        string sourceChain,
        string sourceAddress,
        address indexed contractAddress,
        bytes32 indexed payloadHash,
        string symbol,
        uint256 amount,
        bytes32 sourceTxHash,
        uint256 sourceEventIndex
    );

    event ContractCallExecuted(bytes32 indexed commandId);

    event TokenMintLimitUpdated(string symbol, uint256 limit);

    event OperatorshipTransferred(bytes newOperatorsData);

    event Upgraded(address indexed implementation);

    /********************\
    |* Public Functions *|
    \********************/

    function sendToken(
        string calldata destinationChain,
        string calldata destinationAddress,
        string calldata symbol,
        uint256 amount
    ) external;

    function callContract(
        string calldata destinationChain,
        string calldata contractAddress,
        bytes calldata payload
    ) external;

    function callContractWithToken(
        string calldata destinationChain,
        string calldata contractAddress,
        bytes calldata payload,
        string calldata symbol,
        uint256 amount
    ) external;

    function isContractCallApproved(
        bytes32 commandId,
        string calldata sourceChain,
        string calldata sourceAddress,
        address contractAddress,
        bytes32 payloadHash
    ) external view returns (bool);

    function isContractCallAndMintApproved(
        bytes32 commandId,
        string calldata sourceChain,
        string calldata sourceAddress,
        address contractAddress,
        bytes32 payloadHash,
        string calldata symbol,
        uint256 amount
    ) external view returns (bool);

    function validateContractCall(
        bytes32 commandId,
        string calldata sourceChain,
        string calldata sourceAddress,
        bytes32 payloadHash
    ) external returns (bool);

    function validateContractCallAndMint(
        bytes32 commandId,
        string calldata sourceChain,
        string calldata sourceAddress,
        bytes32 payloadHash,
        string calldata symbol,
        uint256 amount
    ) external returns (bool);

    /***********\
    |* Getters *|
    \***********/

    function authModule() external view returns (address);

    function tokenDeployer() external view returns (address);

    function tokenMintLimit(string memory symbol) external view returns (uint256);

    function tokenMintAmount(string memory symbol) external view returns (uint256);

    function allTokensFrozen() external view returns (bool);

    function implementation() external view returns (address);

    function tokenAddresses(string memory symbol) external view returns (address);

    function tokenFrozen(string memory symbol) external view returns (bool);

    function isCommandExecuted(bytes32 commandId) external view returns (bool);

    /************************\
    |* Governance Functions *|
    \************************/

    function setTokenMintLimits(string[] calldata symbols, uint256[] calldata limits) external;

    function upgrade(
        address newImplementation,
        bytes32 newImplementationCodeHash,
        bytes calldata setupParams
    ) external;

    /**********************\
    |* External Functions *|
    \**********************/

    function execute(bytes calldata input) external;
}

// File: @axelar-network/axelar-gmp-sdk-solidity/contracts/interfaces/IAxelarExecutable.sol



pragma solidity ^0.8.0;


interface IAxelarExecutable {
    error InvalidAddress();
    error NotApprovedByGateway();

    function gateway() external view returns (IAxelarGateway);

    function execute(
        bytes32 commandId,
        string calldata sourceChain,
        string calldata sourceAddress,
        bytes calldata payload
    ) external;

    function executeWithToken(
        bytes32 commandId,
        string calldata sourceChain,
        string calldata sourceAddress,
        bytes calldata payload,
        string calldata tokenSymbol,
        uint256 amount
    ) external;
}

// File: @axelar-network/axelar-gmp-sdk-solidity/contracts/executable/AxelarExecutable.sol



pragma solidity ^0.8.0;



contract AxelarExecutable is IAxelarExecutable {
    IAxelarGateway public immutable gateway;

    constructor(address gateway_) {
        if (gateway_ == address(0)) revert InvalidAddress();

        gateway = IAxelarGateway(gateway_);
    }

    function execute(
        bytes32 commandId,
        string calldata sourceChain,
        string calldata sourceAddress,
        bytes calldata payload
    ) external {
        bytes32 payloadHash = keccak256(payload);

        if (!gateway.validateContractCall(commandId, sourceChain, sourceAddress, payloadHash))
            revert NotApprovedByGateway();

        _execute(sourceChain, sourceAddress, payload);
    }

    function executeWithToken(
        bytes32 commandId,
        string calldata sourceChain,
        string calldata sourceAddress,
        bytes calldata payload,
        string calldata tokenSymbol,
        uint256 amount
    ) external {
        bytes32 payloadHash = keccak256(payload);

        if (
            !gateway.validateContractCallAndMint(
                commandId,
                sourceChain,
                sourceAddress,
                payloadHash,
                tokenSymbol,
                amount
            )
        ) revert NotApprovedByGateway();

        _executeWithToken(sourceChain, sourceAddress, payload, tokenSymbol, amount);
    }

    function _execute(
        string calldata sourceChain,
        string calldata sourceAddress,
        bytes calldata payload
    ) internal virtual {}

    function _executeWithToken(
        string calldata sourceChain,
        string calldata sourceAddress,
        bytes calldata payload,
        string calldata tokenSymbol,
        uint256 amount
    ) internal virtual {}
}

// File: contracts/SimpleGeneralMessage.sol


pragma solidity ^0.8.0;




contract SenderReceiver is AxelarExecutable {
    IAxelarGasService public immutable gasService;
    string public message;

    constructor(address gateway_, address gasService_) AxelarExecutable(gateway_) {
        gasService = IAxelarGasService(gasService_);
    }

    function sendMessage(
        string calldata destinationChain,
        string calldata destinationAddress,
        string calldata message_
    ) external payable {
        bytes memory payload = abi.encode(message_);
        gasService.payNativeGasForContractCall{value: msg.value} (
            address(this),
            destinationChain,
            destinationAddress,
            payload,
            msg.sender
        );

        gateway.callContract(destinationChain,destinationAddress,payload);
    }

    function _execute(
        string calldata sourceChain,
        string calldata sourceAddress,
        bytes calldata payload_
    ) internal override {
        message = abi.decode(payload_, (string));
    }
}

Contract ABI

API
[{"inputs":[{"internalType":"address","name":"gateway_","type":"address"},{"internalType":"address","name":"gasService_","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[],"name":"InvalidAddress","type":"error"},{"inputs":[],"name":"NotApprovedByGateway","type":"error"},{"inputs":[{"internalType":"bytes32","name":"commandId","type":"bytes32"},{"internalType":"string","name":"sourceChain","type":"string"},{"internalType":"string","name":"sourceAddress","type":"string"},{"internalType":"bytes","name":"payload","type":"bytes"}],"name":"execute","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"commandId","type":"bytes32"},{"internalType":"string","name":"sourceChain","type":"string"},{"internalType":"string","name":"sourceAddress","type":"string"},{"internalType":"bytes","name":"payload","type":"bytes"},{"internalType":"string","name":"tokenSymbol","type":"string"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"executeWithToken","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"gasService","outputs":[{"internalType":"contract IAxelarGasService","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"gateway","outputs":[{"internalType":"contract IAxelarGateway","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"message","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"string","name":"destinationChain","type":"string"},{"internalType":"string","name":"destinationAddress","type":"string"},{"internalType":"string","name":"message_","type":"string"}],"name":"sendMessage","outputs":[],"stateMutability":"payable","type":"function"}]

60c06040523480156200001157600080fd5b506040516200132d3803806200132d83398181016040528101906200003791906200017b565b81600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415620000a0576040517fe6c4247b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1660808173ffffffffffffffffffffffffffffffffffffffff1681525050508073ffffffffffffffffffffffffffffffffffffffff1660a08173ffffffffffffffffffffffffffffffffffffffff16815250505050620001c2565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000620001438262000116565b9050919050565b620001558162000136565b81146200016157600080fd5b50565b60008151905062000175816200014a565b92915050565b6000806040838503121562000195576200019462000111565b5b6000620001a58582860162000164565b9250506020620001b88582860162000164565b9150509250929050565b60805160a05161112962000204600039600081816101710152610513015260008181610209015281816102a5015281816102e5015261041001526111296000f3fe6080604052600436106100555760003560e01c80630eabeffe1461005a578063116191b6146100765780631a98b2e0146100a157806349160658146100ca5780636a22d8cc146100f3578063e21f37ce1461011e575b600080fd5b610074600480360381019061006f9190610717565b610149565b005b34801561008257600080fd5b5061008b6102a3565b604051610098919061084a565b60405180910390f35b3480156100ad57600080fd5b506100c860048036038101906100c39190610927565b6102c7565b005b3480156100d657600080fd5b506100f160048036038101906100ec9190610a37565b6103f2565b005b3480156100ff57600080fd5b50610108610511565b6040516101159190610b21565b60405180910390f35b34801561012a57600080fd5b50610133610535565b6040516101409190610bd5565b60405180910390f35b6000828260405160200161015e929190610c33565b60405160208183030381529060405290507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16630c93e3bb34308a8a8a8a88336040518963ffffffff1660e01b81526004016101d59796959493929190610ccd565b6000604051808303818588803b1580156101ee57600080fd5b505af1158015610202573d6000803e3d6000fd5b50505050507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16631c92115f88888888866040518663ffffffff1660e01b8152600401610268959493929190610d39565b600060405180830381600087803b15801561028257600080fd5b505af1158015610296573d6000803e3d6000fd5b5050505050505050505050565b7f000000000000000000000000000000000000000000000000000000000000000081565b600085856040516102d9929190610db9565b604051809103902090507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16631876eed98c8c8c8c8c878b8b8b6040518a63ffffffff1660e01b815260040161034c99989796959493929190610df0565b602060405180830381600087803b15801561036657600080fd5b505af115801561037a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061039e9190610ea4565b6103d4576040517f500c44b400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6103e58a8a8a8a8a8a8a8a8a6105c3565b5050505050505050505050565b60008282604051610404929190610db9565b604051809103902090507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16635f6970c38989898989876040518763ffffffff1660e01b815260040161047196959493929190610ed1565b602060405180830381600087803b15801561048b57600080fd5b505af115801561049f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104c39190610ea4565b6104f9576040517f500c44b400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6105078787878787876105ce565b5050505050505050565b7f000000000000000000000000000000000000000000000000000000000000000081565b6000805461054290610f57565b80601f016020809104026020016040519081016040528092919081815260200182805461056e90610f57565b80156105bb5780601f10610590576101008083540402835291602001916105bb565b820191906000526020600020905b81548152906001019060200180831161059e57829003601f168201915b505050505081565b505050505050505050565b81818101906105dd91906110aa565b600090805190602001906105f29291906105fb565b50505050505050565b82805461060790610f57565b90600052602060002090601f0160209004810192826106295760008555610670565b82601f1061064257805160ff1916838001178555610670565b82800160010185558215610670579182015b8281111561066f578251825591602001919060010190610654565b5b50905061067d9190610681565b5090565b5b8082111561069a576000816000905550600101610682565b5090565b6000604051905090565b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b60008083601f8401126106d7576106d66106b2565b5b8235905067ffffffffffffffff8111156106f4576106f36106b7565b5b6020830191508360018202830111156107105761070f6106bc565b5b9250929050565b60008060008060008060608789031215610734576107336106a8565b5b600087013567ffffffffffffffff811115610752576107516106ad565b5b61075e89828a016106c1565b9650965050602087013567ffffffffffffffff811115610781576107806106ad565b5b61078d89828a016106c1565b9450945050604087013567ffffffffffffffff8111156107b0576107af6106ad565b5b6107bc89828a016106c1565b92509250509295509295509295565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600061081061080b610806846107cb565b6107eb565b6107cb565b9050919050565b6000610822826107f5565b9050919050565b600061083482610817565b9050919050565b61084481610829565b82525050565b600060208201905061085f600083018461083b565b92915050565b6000819050919050565b61087881610865565b811461088357600080fd5b50565b6000813590506108958161086f565b92915050565b60008083601f8401126108b1576108b06106b2565b5b8235905067ffffffffffffffff8111156108ce576108cd6106b7565b5b6020830191508360018202830111156108ea576108e96106bc565b5b9250929050565b6000819050919050565b610904816108f1565b811461090f57600080fd5b50565b600081359050610921816108fb565b92915050565b60008060008060008060008060008060c08b8d03121561094a576109496106a8565b5b60006109588d828e01610886565b9a505060208b013567ffffffffffffffff811115610979576109786106ad565b5b6109858d828e016106c1565b995099505060408b013567ffffffffffffffff8111156109a8576109a76106ad565b5b6109b48d828e016106c1565b975097505060608b013567ffffffffffffffff8111156109d7576109d66106ad565b5b6109e38d828e0161089b565b955095505060808b013567ffffffffffffffff811115610a0657610a056106ad565b5b610a128d828e016106c1565b935093505060a0610a258d828e01610912565b9150509295989b9194979a5092959850565b60008060008060008060006080888a031215610a5657610a556106a8565b5b6000610a648a828b01610886565b975050602088013567ffffffffffffffff811115610a8557610a846106ad565b5b610a918a828b016106c1565b9650965050604088013567ffffffffffffffff811115610ab457610ab36106ad565b5b610ac08a828b016106c1565b9450945050606088013567ffffffffffffffff811115610ae357610ae26106ad565b5b610aef8a828b0161089b565b925092505092959891949750929550565b6000610b0b82610817565b9050919050565b610b1b81610b00565b82525050565b6000602082019050610b366000830184610b12565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b83811015610b76578082015181840152602081019050610b5b565b83811115610b85576000848401525b50505050565b6000601f19601f8301169050919050565b6000610ba782610b3c565b610bb18185610b47565b9350610bc1818560208601610b58565b610bca81610b8b565b840191505092915050565b60006020820190508181036000830152610bef8184610b9c565b905092915050565b82818337600083830152505050565b6000610c128385610b47565b9350610c1f838584610bf7565b610c2883610b8b565b840190509392505050565b60006020820190508181036000830152610c4e818486610c06565b90509392505050565b6000610c62826107cb565b9050919050565b610c7281610c57565b82525050565b600081519050919050565b600082825260208201905092915050565b6000610c9f82610c78565b610ca98185610c83565b9350610cb9818560208601610b58565b610cc281610b8b565b840191505092915050565b600060a082019050610ce2600083018a610c69565b8181036020830152610cf581888a610c06565b90508181036040830152610d0a818688610c06565b90508181036060830152610d1e8185610c94565b9050610d2d6080830184610c69565b98975050505050505050565b60006060820190508181036000830152610d54818789610c06565b90508181036020830152610d69818587610c06565b90508181036040830152610d7d8184610c94565b90509695505050505050565b600081905092915050565b6000610da08385610d89565b9350610dad838584610bf7565b82840190509392505050565b6000610dc6828486610d94565b91508190509392505050565b610ddb81610865565b82525050565b610dea816108f1565b82525050565b600060c082019050610e05600083018c610dd2565b8181036020830152610e18818a8c610c06565b90508181036040830152610e2d81888a610c06565b9050610e3c6060830187610dd2565b8181036080830152610e4f818587610c06565b9050610e5e60a0830184610de1565b9a9950505050505050505050565b60008115159050919050565b610e8181610e6c565b8114610e8c57600080fd5b50565b600081519050610e9e81610e78565b92915050565b600060208284031215610eba57610eb96106a8565b5b6000610ec884828501610e8f565b91505092915050565b6000608082019050610ee66000830189610dd2565b8181036020830152610ef9818789610c06565b90508181036040830152610f0e818587610c06565b9050610f1d6060830184610dd2565b979650505050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680610f6f57607f821691505b60208210811415610f8357610f82610f28565b5b50919050565b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b610fc682610b8b565b810181811067ffffffffffffffff82111715610fe557610fe4610f8e565b5b80604052505050565b6000610ff861069e565b90506110048282610fbd565b919050565b600067ffffffffffffffff82111561102457611023610f8e565b5b61102d82610b8b565b9050602081019050919050565b600061104d61104884611009565b610fee565b90508281526020810184848401111561106957611068610f89565b5b611074848285610bf7565b509392505050565b600082601f830112611091576110906106b2565b5b81356110a184826020860161103a565b91505092915050565b6000602082840312156110c0576110bf6106a8565b5b600082013567ffffffffffffffff8111156110de576110dd6106ad565b5b6110ea8482850161107c565b9150509291505056fea2646970667358221220cc6a8f3bfa12742258d1dd436c09ba40df86b08492e9e4a4401e704dddb2fa4b64736f6c634300080900330000000000000000000000005769d84dd62a6fd969856c75c7d321b84d455929000000000000000000000000be406f0189a0b4cf3a05c286473d23791dd44cc6

Deployed Bytecode

0x6080604052600436106100555760003560e01c80630eabeffe1461005a578063116191b6146100765780631a98b2e0146100a157806349160658146100ca5780636a22d8cc146100f3578063e21f37ce1461011e575b600080fd5b610074600480360381019061006f9190610717565b610149565b005b34801561008257600080fd5b5061008b6102a3565b604051610098919061084a565b60405180910390f35b3480156100ad57600080fd5b506100c860048036038101906100c39190610927565b6102c7565b005b3480156100d657600080fd5b506100f160048036038101906100ec9190610a37565b6103f2565b005b3480156100ff57600080fd5b50610108610511565b6040516101159190610b21565b60405180910390f35b34801561012a57600080fd5b50610133610535565b6040516101409190610bd5565b60405180910390f35b6000828260405160200161015e929190610c33565b60405160208183030381529060405290507f000000000000000000000000be406f0189a0b4cf3a05c286473d23791dd44cc673ffffffffffffffffffffffffffffffffffffffff16630c93e3bb34308a8a8a8a88336040518963ffffffff1660e01b81526004016101d59796959493929190610ccd565b6000604051808303818588803b1580156101ee57600080fd5b505af1158015610202573d6000803e3d6000fd5b50505050507f0000000000000000000000005769d84dd62a6fd969856c75c7d321b84d45592973ffffffffffffffffffffffffffffffffffffffff16631c92115f88888888866040518663ffffffff1660e01b8152600401610268959493929190610d39565b600060405180830381600087803b15801561028257600080fd5b505af1158015610296573d6000803e3d6000fd5b5050505050505050505050565b7f0000000000000000000000005769d84dd62a6fd969856c75c7d321b84d45592981565b600085856040516102d9929190610db9565b604051809103902090507f0000000000000000000000005769d84dd62a6fd969856c75c7d321b84d45592973ffffffffffffffffffffffffffffffffffffffff16631876eed98c8c8c8c8c878b8b8b6040518a63ffffffff1660e01b815260040161034c99989796959493929190610df0565b602060405180830381600087803b15801561036657600080fd5b505af115801561037a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061039e9190610ea4565b6103d4576040517f500c44b400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6103e58a8a8a8a8a8a8a8a8a6105c3565b5050505050505050505050565b60008282604051610404929190610db9565b604051809103902090507f0000000000000000000000005769d84dd62a6fd969856c75c7d321b84d45592973ffffffffffffffffffffffffffffffffffffffff16635f6970c38989898989876040518763ffffffff1660e01b815260040161047196959493929190610ed1565b602060405180830381600087803b15801561048b57600080fd5b505af115801561049f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104c39190610ea4565b6104f9576040517f500c44b400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6105078787878787876105ce565b5050505050505050565b7f000000000000000000000000be406f0189a0b4cf3a05c286473d23791dd44cc681565b6000805461054290610f57565b80601f016020809104026020016040519081016040528092919081815260200182805461056e90610f57565b80156105bb5780601f10610590576101008083540402835291602001916105bb565b820191906000526020600020905b81548152906001019060200180831161059e57829003601f168201915b505050505081565b505050505050505050565b81818101906105dd91906110aa565b600090805190602001906105f29291906105fb565b50505050505050565b82805461060790610f57565b90600052602060002090601f0160209004810192826106295760008555610670565b82601f1061064257805160ff1916838001178555610670565b82800160010185558215610670579182015b8281111561066f578251825591602001919060010190610654565b5b50905061067d9190610681565b5090565b5b8082111561069a576000816000905550600101610682565b5090565b6000604051905090565b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b60008083601f8401126106d7576106d66106b2565b5b8235905067ffffffffffffffff8111156106f4576106f36106b7565b5b6020830191508360018202830111156107105761070f6106bc565b5b9250929050565b60008060008060008060608789031215610734576107336106a8565b5b600087013567ffffffffffffffff811115610752576107516106ad565b5b61075e89828a016106c1565b9650965050602087013567ffffffffffffffff811115610781576107806106ad565b5b61078d89828a016106c1565b9450945050604087013567ffffffffffffffff8111156107b0576107af6106ad565b5b6107bc89828a016106c1565b92509250509295509295509295565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600061081061080b610806846107cb565b6107eb565b6107cb565b9050919050565b6000610822826107f5565b9050919050565b600061083482610817565b9050919050565b61084481610829565b82525050565b600060208201905061085f600083018461083b565b92915050565b6000819050919050565b61087881610865565b811461088357600080fd5b50565b6000813590506108958161086f565b92915050565b60008083601f8401126108b1576108b06106b2565b5b8235905067ffffffffffffffff8111156108ce576108cd6106b7565b5b6020830191508360018202830111156108ea576108e96106bc565b5b9250929050565b6000819050919050565b610904816108f1565b811461090f57600080fd5b50565b600081359050610921816108fb565b92915050565b60008060008060008060008060008060c08b8d03121561094a576109496106a8565b5b60006109588d828e01610886565b9a505060208b013567ffffffffffffffff811115610979576109786106ad565b5b6109858d828e016106c1565b995099505060408b013567ffffffffffffffff8111156109a8576109a76106ad565b5b6109b48d828e016106c1565b975097505060608b013567ffffffffffffffff8111156109d7576109d66106ad565b5b6109e38d828e0161089b565b955095505060808b013567ffffffffffffffff811115610a0657610a056106ad565b5b610a128d828e016106c1565b935093505060a0610a258d828e01610912565b9150509295989b9194979a5092959850565b60008060008060008060006080888a031215610a5657610a556106a8565b5b6000610a648a828b01610886565b975050602088013567ffffffffffffffff811115610a8557610a846106ad565b5b610a918a828b016106c1565b9650965050604088013567ffffffffffffffff811115610ab457610ab36106ad565b5b610ac08a828b016106c1565b9450945050606088013567ffffffffffffffff811115610ae357610ae26106ad565b5b610aef8a828b0161089b565b925092505092959891949750929550565b6000610b0b82610817565b9050919050565b610b1b81610b00565b82525050565b6000602082019050610b366000830184610b12565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b83811015610b76578082015181840152602081019050610b5b565b83811115610b85576000848401525b50505050565b6000601f19601f8301169050919050565b6000610ba782610b3c565b610bb18185610b47565b9350610bc1818560208601610b58565b610bca81610b8b565b840191505092915050565b60006020820190508181036000830152610bef8184610b9c565b905092915050565b82818337600083830152505050565b6000610c128385610b47565b9350610c1f838584610bf7565b610c2883610b8b565b840190509392505050565b60006020820190508181036000830152610c4e818486610c06565b90509392505050565b6000610c62826107cb565b9050919050565b610c7281610c57565b82525050565b600081519050919050565b600082825260208201905092915050565b6000610c9f82610c78565b610ca98185610c83565b9350610cb9818560208601610b58565b610cc281610b8b565b840191505092915050565b600060a082019050610ce2600083018a610c69565b8181036020830152610cf581888a610c06565b90508181036040830152610d0a818688610c06565b90508181036060830152610d1e8185610c94565b9050610d2d6080830184610c69565b98975050505050505050565b60006060820190508181036000830152610d54818789610c06565b90508181036020830152610d69818587610c06565b90508181036040830152610d7d8184610c94565b90509695505050505050565b600081905092915050565b6000610da08385610d89565b9350610dad838584610bf7565b82840190509392505050565b6000610dc6828486610d94565b91508190509392505050565b610ddb81610865565b82525050565b610dea816108f1565b82525050565b600060c082019050610e05600083018c610dd2565b8181036020830152610e18818a8c610c06565b90508181036040830152610e2d81888a610c06565b9050610e3c6060830187610dd2565b8181036080830152610e4f818587610c06565b9050610e5e60a0830184610de1565b9a9950505050505050505050565b60008115159050919050565b610e8181610e6c565b8114610e8c57600080fd5b50565b600081519050610e9e81610e78565b92915050565b600060208284031215610eba57610eb96106a8565b5b6000610ec884828501610e8f565b91505092915050565b6000608082019050610ee66000830189610dd2565b8181036020830152610ef9818789610c06565b90508181036040830152610f0e818587610c06565b9050610f1d6060830184610dd2565b979650505050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680610f6f57607f821691505b60208210811415610f8357610f82610f28565b5b50919050565b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b610fc682610b8b565b810181811067ffffffffffffffff82111715610fe557610fe4610f8e565b5b80604052505050565b6000610ff861069e565b90506110048282610fbd565b919050565b600067ffffffffffffffff82111561102457611023610f8e565b5b61102d82610b8b565b9050602081019050919050565b600061104d61104884611009565b610fee565b90508281526020810184848401111561106957611068610f89565b5b611074848285610bf7565b509392505050565b600082601f830112611091576110906106b2565b5b81356110a184826020860161103a565b91505092915050565b6000602082840312156110c0576110bf6106a8565b5b600082013567ffffffffffffffff8111156110de576110dd6106ad565b5b6110ea8482850161107c565b9150509291505056fea2646970667358221220cc6a8f3bfa12742258d1dd436c09ba40df86b08492e9e4a4401e704dddb2fa4b64736f6c63430008090033

Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)

0000000000000000000000005769d84dd62a6fd969856c75c7d321b84d455929000000000000000000000000be406f0189a0b4cf3a05c286473d23791dd44cc6

-----Decoded View---------------
Arg [0] : gateway_ (address): 0x5769D84DD62a6fD969856c75c7D321b84d455929
Arg [1] : gasService_ (address): 0xbE406F0189A0B4cf3A05C286473D23791Dd44Cc6

-----Encoded View---------------
2 Constructor Arguments found :
Arg [0] : 0000000000000000000000005769d84dd62a6fd969856c75c7d321b84d455929
Arg [1] : 000000000000000000000000be406f0189a0b4cf3a05c286473d23791dd44cc6


Deployed Bytecode Sourcemap

29014:1032:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29295:526;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;27196:39;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27838:689;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;27399:431;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;29065:45;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29117:21;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29295:526;29474:20;29508:8;;29497:20;;;;;;;;;:::i;:::-;;;;;;;;;;;;;29474:43;;29528:10;:38;;;29574:9;29608:4;29628:16;;29659:18;;29692:7;29714:10;29528:207;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29748:7;:20;;;29769:16;;29786:18;;29805:7;29748:65;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29463:358;29295:526;;;;;;:::o;27196:39::-;;;:::o;27838:689::-;28093:19;28125:7;;28115:18;;;;;;;:::i;:::-;;;;;;;;28093:40;;28165:7;:35;;;28219:9;28247:11;;28277:13;;28309:11;28339;;28369:6;28165:225;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;28146:285;;28409:22;;;;;;;;;;;;;;28146:285;28444:75;28462:11;;28475:13;;28490:7;;28499:11;;28512:6;28444:17;:75::i;:::-;28082:445;27838:689;;;;;;;;;;:::o;27399:431::-;27582:19;27614:7;;27604:18;;;;;;;:::i;:::-;;;;;;;;27582:40;;27640:7;:28;;;27669:9;27680:11;;27693:13;;27708:11;27640:80;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;27635:129;;27742:22;;;;;;;;;;;;;;27635:129;27777:45;27786:11;;27799:13;;27814:7;;27777:8;:45::i;:::-;27571:259;27399:431;;;;;;;:::o;29065:45::-;;;:::o;29117:21::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;28698:227::-;;;;;;;;;;:::o;29829:214::-;30016:8;;30005:30;;;;;;;:::i;:::-;29995:7;:40;;;;;;;;;;;;:::i;:::-;;29829:214;;;;;;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::o;7:75:1:-;40:6;73:2;67:9;57:19;;7:75;:::o;88:117::-;197:1;194;187:12;211:117;320:1;317;310:12;334:117;443:1;440;433:12;457:117;566:1;563;556:12;580:117;689:1;686;679:12;717:553;775:8;785:6;835:3;828:4;820:6;816:17;812:27;802:122;;843:79;;:::i;:::-;802:122;956:6;943:20;933:30;;986:18;978:6;975:30;972:117;;;1008:79;;:::i;:::-;972:117;1122:4;1114:6;1110:17;1098:29;;1176:3;1168:4;1160:6;1156:17;1146:8;1142:32;1139:41;1136:128;;;1183:79;;:::i;:::-;1136:128;717:553;;;;;:::o;1276:1219::-;1389:6;1397;1405;1413;1421;1429;1478:2;1466:9;1457:7;1453:23;1449:32;1446:119;;;1484:79;;:::i;:::-;1446:119;1632:1;1621:9;1617:17;1604:31;1662:18;1654:6;1651:30;1648:117;;;1684:79;;:::i;:::-;1648:117;1797:65;1854:7;1845:6;1834:9;1830:22;1797:65;:::i;:::-;1779:83;;;;1575:297;1939:2;1928:9;1924:18;1911:32;1970:18;1962:6;1959:30;1956:117;;;1992:79;;:::i;:::-;1956:117;2105:65;2162:7;2153:6;2142:9;2138:22;2105:65;:::i;:::-;2087:83;;;;1882:298;2247:2;2236:9;2232:18;2219:32;2278:18;2270:6;2267:30;2264:117;;;2300:79;;:::i;:::-;2264:117;2413:65;2470:7;2461:6;2450:9;2446:22;2413:65;:::i;:::-;2395:83;;;;2190:298;1276:1219;;;;;;;;:::o;2501:126::-;2538:7;2578:42;2571:5;2567:54;2556:65;;2501:126;;;:::o;2633:60::-;2661:3;2682:5;2675:12;;2633:60;;;:::o;2699:142::-;2749:9;2782:53;2800:34;2809:24;2827:5;2809:24;:::i;:::-;2800:34;:::i;:::-;2782:53;:::i;:::-;2769:66;;2699:142;;;:::o;2847:126::-;2897:9;2930:37;2961:5;2930:37;:::i;:::-;2917:50;;2847:126;;;:::o;2979:148::-;3051:9;3084:37;3115:5;3084:37;:::i;:::-;3071:50;;2979:148;;;:::o;3133:175::-;3242:59;3295:5;3242:59;:::i;:::-;3237:3;3230:72;3133:175;;:::o;3314:266::-;3429:4;3467:2;3456:9;3452:18;3444:26;;3480:93;3570:1;3559:9;3555:17;3546:6;3480:93;:::i;:::-;3314:266;;;;:::o;3586:77::-;3623:7;3652:5;3641:16;;3586:77;;;:::o;3669:122::-;3742:24;3760:5;3742:24;:::i;:::-;3735:5;3732:35;3722:63;;3781:1;3778;3771:12;3722:63;3669:122;:::o;3797:139::-;3843:5;3881:6;3868:20;3859:29;;3897:33;3924:5;3897:33;:::i;:::-;3797:139;;;;:::o;3955:552::-;4012:8;4022:6;4072:3;4065:4;4057:6;4053:17;4049:27;4039:122;;4080:79;;:::i;:::-;4039:122;4193:6;4180:20;4170:30;;4223:18;4215:6;4212:30;4209:117;;;4245:79;;:::i;:::-;4209:117;4359:4;4351:6;4347:17;4335:29;;4413:3;4405:4;4397:6;4393:17;4383:8;4379:32;4376:41;4373:128;;;4420:79;;:::i;:::-;4373:128;3955:552;;;;;:::o;4513:77::-;4550:7;4579:5;4568:16;;4513:77;;;:::o;4596:122::-;4669:24;4687:5;4669:24;:::i;:::-;4662:5;4659:35;4649:63;;4708:1;4705;4698:12;4649:63;4596:122;:::o;4724:139::-;4770:5;4808:6;4795:20;4786:29;;4824:33;4851:5;4824:33;:::i;:::-;4724:139;;;;:::o;4869:1855::-;5020:6;5028;5036;5044;5052;5060;5068;5076;5084;5092;5141:3;5129:9;5120:7;5116:23;5112:33;5109:120;;;5148:79;;:::i;:::-;5109:120;5268:1;5293:53;5338:7;5329:6;5318:9;5314:22;5293:53;:::i;:::-;5283:63;;5239:117;5423:2;5412:9;5408:18;5395:32;5454:18;5446:6;5443:30;5440:117;;;5476:79;;:::i;:::-;5440:117;5589:65;5646:7;5637:6;5626:9;5622:22;5589:65;:::i;:::-;5571:83;;;;5366:298;5731:2;5720:9;5716:18;5703:32;5762:18;5754:6;5751:30;5748:117;;;5784:79;;:::i;:::-;5748:117;5897:65;5954:7;5945:6;5934:9;5930:22;5897:65;:::i;:::-;5879:83;;;;5674:298;6039:2;6028:9;6024:18;6011:32;6070:18;6062:6;6059:30;6056:117;;;6092:79;;:::i;:::-;6056:117;6205:64;6261:7;6252:6;6241:9;6237:22;6205:64;:::i;:::-;6187:82;;;;5982:297;6346:3;6335:9;6331:19;6318:33;6378:18;6370:6;6367:30;6364:117;;;6400:79;;:::i;:::-;6364:117;6513:65;6570:7;6561:6;6550:9;6546:22;6513:65;:::i;:::-;6495:83;;;;6289:299;6627:3;6654:53;6699:7;6690:6;6679:9;6675:22;6654:53;:::i;:::-;6644:63;;6598:119;4869:1855;;;;;;;;;;;;;:::o;6730:1363::-;6851:6;6859;6867;6875;6883;6891;6899;6948:3;6936:9;6927:7;6923:23;6919:33;6916:120;;;6955:79;;:::i;:::-;6916:120;7075:1;7100:53;7145:7;7136:6;7125:9;7121:22;7100:53;:::i;:::-;7090:63;;7046:117;7230:2;7219:9;7215:18;7202:32;7261:18;7253:6;7250:30;7247:117;;;7283:79;;:::i;:::-;7247:117;7396:65;7453:7;7444:6;7433:9;7429:22;7396:65;:::i;:::-;7378:83;;;;7173:298;7538:2;7527:9;7523:18;7510:32;7569:18;7561:6;7558:30;7555:117;;;7591:79;;:::i;:::-;7555:117;7704:65;7761:7;7752:6;7741:9;7737:22;7704:65;:::i;:::-;7686:83;;;;7481:298;7846:2;7835:9;7831:18;7818:32;7877:18;7869:6;7866:30;7863:117;;;7899:79;;:::i;:::-;7863:117;8012:64;8068:7;8059:6;8048:9;8044:22;8012:64;:::i;:::-;7994:82;;;;7789:297;6730:1363;;;;;;;;;;:::o;8099:151::-;8174:9;8207:37;8238:5;8207:37;:::i;:::-;8194:50;;8099:151;;;:::o;8256:181::-;8368:62;8424:5;8368:62;:::i;:::-;8363:3;8356:75;8256:181;;:::o;8443:272::-;8561:4;8599:2;8588:9;8584:18;8576:26;;8612:96;8705:1;8694:9;8690:17;8681:6;8612:96;:::i;:::-;8443:272;;;;:::o;8721:99::-;8773:6;8807:5;8801:12;8791:22;;8721:99;;;:::o;8826:169::-;8910:11;8944:6;8939:3;8932:19;8984:4;8979:3;8975:14;8960:29;;8826:169;;;;:::o;9001:307::-;9069:1;9079:113;9093:6;9090:1;9087:13;9079:113;;;9178:1;9173:3;9169:11;9163:18;9159:1;9154:3;9150:11;9143:39;9115:2;9112:1;9108:10;9103:15;;9079:113;;;9210:6;9207:1;9204:13;9201:101;;;9290:1;9281:6;9276:3;9272:16;9265:27;9201:101;9050:258;9001:307;;;:::o;9314:102::-;9355:6;9406:2;9402:7;9397:2;9390:5;9386:14;9382:28;9372:38;;9314:102;;;:::o;9422:364::-;9510:3;9538:39;9571:5;9538:39;:::i;:::-;9593:71;9657:6;9652:3;9593:71;:::i;:::-;9586:78;;9673:52;9718:6;9713:3;9706:4;9699:5;9695:16;9673:52;:::i;:::-;9750:29;9772:6;9750:29;:::i;:::-;9745:3;9741:39;9734:46;;9514:272;9422:364;;;;:::o;9792:313::-;9905:4;9943:2;9932:9;9928:18;9920:26;;9992:9;9986:4;9982:20;9978:1;9967:9;9963:17;9956:47;10020:78;10093:4;10084:6;10020:78;:::i;:::-;10012:86;;9792:313;;;;:::o;10111:154::-;10195:6;10190:3;10185;10172:30;10257:1;10248:6;10243:3;10239:16;10232:27;10111:154;;;:::o;10295:304::-;10393:3;10414:71;10478:6;10473:3;10414:71;:::i;:::-;10407:78;;10495:43;10531:6;10526:3;10519:5;10495:43;:::i;:::-;10563:29;10585:6;10563:29;:::i;:::-;10558:3;10554:39;10547:46;;10295:304;;;;;:::o;10605:333::-;10728:4;10766:2;10755:9;10751:18;10743:26;;10815:9;10809:4;10805:20;10801:1;10790:9;10786:17;10779:47;10843:88;10926:4;10917:6;10909;10843:88;:::i;:::-;10835:96;;10605:333;;;;;:::o;10944:96::-;10981:7;11010:24;11028:5;11010:24;:::i;:::-;10999:35;;10944:96;;;:::o;11046:118::-;11133:24;11151:5;11133:24;:::i;:::-;11128:3;11121:37;11046:118;;:::o;11170:98::-;11221:6;11255:5;11249:12;11239:22;;11170:98;;;:::o;11274:168::-;11357:11;11391:6;11386:3;11379:19;11431:4;11426:3;11422:14;11407:29;;11274:168;;;;:::o;11448:360::-;11534:3;11562:38;11594:5;11562:38;:::i;:::-;11616:70;11679:6;11674:3;11616:70;:::i;:::-;11609:77;;11695:52;11740:6;11735:3;11728:4;11721:5;11717:16;11695:52;:::i;:::-;11772:29;11794:6;11772:29;:::i;:::-;11767:3;11763:39;11756:46;;11538:270;11448:360;;;;:::o;11814:973::-;12097:4;12135:3;12124:9;12120:19;12112:27;;12149:71;12217:1;12206:9;12202:17;12193:6;12149:71;:::i;:::-;12267:9;12261:4;12257:20;12252:2;12241:9;12237:18;12230:48;12295:88;12378:4;12369:6;12361;12295:88;:::i;:::-;12287:96;;12430:9;12424:4;12420:20;12415:2;12404:9;12400:18;12393:48;12458:88;12541:4;12532:6;12524;12458:88;:::i;:::-;12450:96;;12593:9;12587:4;12583:20;12578:2;12567:9;12563:18;12556:48;12621:76;12692:4;12683:6;12621:76;:::i;:::-;12613:84;;12707:73;12775:3;12764:9;12760:19;12751:6;12707:73;:::i;:::-;11814:973;;;;;;;;;;:::o;12793:751::-;13020:4;13058:2;13047:9;13043:18;13035:26;;13107:9;13101:4;13097:20;13093:1;13082:9;13078:17;13071:47;13135:88;13218:4;13209:6;13201;13135:88;:::i;:::-;13127:96;;13270:9;13264:4;13260:20;13255:2;13244:9;13240:18;13233:48;13298:88;13381:4;13372:6;13364;13298:88;:::i;:::-;13290:96;;13433:9;13427:4;13423:20;13418:2;13407:9;13403:18;13396:48;13461:76;13532:4;13523:6;13461:76;:::i;:::-;13453:84;;12793:751;;;;;;;;:::o;13550:147::-;13651:11;13688:3;13673:18;;13550:147;;;;:::o;13725:314::-;13839:3;13860:88;13941:6;13936:3;13860:88;:::i;:::-;13853:95;;13958:43;13994:6;13989:3;13982:5;13958:43;:::i;:::-;14026:6;14021:3;14017:16;14010:23;;13725:314;;;;;:::o;14045:291::-;14185:3;14207:103;14306:3;14297:6;14289;14207:103;:::i;:::-;14200:110;;14327:3;14320:10;;14045:291;;;;;:::o;14342:118::-;14429:24;14447:5;14429:24;:::i;:::-;14424:3;14417:37;14342:118;;:::o;14466:::-;14553:24;14571:5;14553:24;:::i;:::-;14548:3;14541:37;14466:118;;:::o;14590:1108::-;14913:4;14951:3;14940:9;14936:19;14928:27;;14965:71;15033:1;15022:9;15018:17;15009:6;14965:71;:::i;:::-;15083:9;15077:4;15073:20;15068:2;15057:9;15053:18;15046:48;15111:88;15194:4;15185:6;15177;15111:88;:::i;:::-;15103:96;;15246:9;15240:4;15236:20;15231:2;15220:9;15216:18;15209:48;15274:88;15357:4;15348:6;15340;15274:88;:::i;:::-;15266:96;;15372:72;15440:2;15429:9;15425:18;15416:6;15372:72;:::i;:::-;15492:9;15486:4;15482:20;15476:3;15465:9;15461:19;15454:49;15520:88;15603:4;15594:6;15586;15520:88;:::i;:::-;15512:96;;15618:73;15686:3;15675:9;15671:19;15662:6;15618:73;:::i;:::-;14590:1108;;;;;;;;;;;;:::o;15704:90::-;15738:7;15781:5;15774:13;15767:21;15756:32;;15704:90;;;:::o;15800:116::-;15870:21;15885:5;15870:21;:::i;:::-;15863:5;15860:32;15850:60;;15906:1;15903;15896:12;15850:60;15800:116;:::o;15922:137::-;15976:5;16007:6;16001:13;15992:22;;16023:30;16047:5;16023:30;:::i;:::-;15922:137;;;;:::o;16065:345::-;16132:6;16181:2;16169:9;16160:7;16156:23;16152:32;16149:119;;;16187:79;;:::i;:::-;16149:119;16307:1;16332:61;16385:7;16376:6;16365:9;16361:22;16332:61;:::i;:::-;16322:71;;16278:125;16065:345;;;;:::o;16416:775::-;16653:4;16691:3;16680:9;16676:19;16668:27;;16705:71;16773:1;16762:9;16758:17;16749:6;16705:71;:::i;:::-;16823:9;16817:4;16813:20;16808:2;16797:9;16793:18;16786:48;16851:88;16934:4;16925:6;16917;16851:88;:::i;:::-;16843:96;;16986:9;16980:4;16976:20;16971:2;16960:9;16956:18;16949:48;17014:88;17097:4;17088:6;17080;17014:88;:::i;:::-;17006:96;;17112:72;17180:2;17169:9;17165:18;17156:6;17112:72;:::i;:::-;16416:775;;;;;;;;;:::o;17197:180::-;17245:77;17242:1;17235:88;17342:4;17339:1;17332:15;17366:4;17363:1;17356:15;17383:320;17427:6;17464:1;17458:4;17454:12;17444:22;;17511:1;17505:4;17501:12;17532:18;17522:81;;17588:4;17580:6;17576:17;17566:27;;17522:81;17650:2;17642:6;17639:14;17619:18;17616:38;17613:84;;;17669:18;;:::i;:::-;17613:84;17434:269;17383:320;;;:::o;17709:117::-;17818:1;17815;17808:12;17832:180;17880:77;17877:1;17870:88;17977:4;17974:1;17967:15;18001:4;17998:1;17991:15;18018:281;18101:27;18123:4;18101:27;:::i;:::-;18093:6;18089:40;18231:6;18219:10;18216:22;18195:18;18183:10;18180:34;18177:62;18174:88;;;18242:18;;:::i;:::-;18174:88;18282:10;18278:2;18271:22;18061:238;18018:281;;:::o;18305:129::-;18339:6;18366:20;;:::i;:::-;18356:30;;18395:33;18423:4;18415:6;18395:33;:::i;:::-;18305:129;;;:::o;18440:308::-;18502:4;18592:18;18584:6;18581:30;18578:56;;;18614:18;;:::i;:::-;18578:56;18652:29;18674:6;18652:29;:::i;:::-;18644:37;;18736:4;18730;18726:15;18718:23;;18440:308;;;:::o;18754:412::-;18832:5;18857:66;18873:49;18915:6;18873:49;:::i;:::-;18857:66;:::i;:::-;18848:75;;18946:6;18939:5;18932:21;18984:4;18977:5;18973:16;19022:3;19013:6;19008:3;19004:16;19001:25;18998:112;;;19029:79;;:::i;:::-;18998:112;19119:41;19153:6;19148:3;19143;19119:41;:::i;:::-;18838:328;18754:412;;;;;:::o;19186:340::-;19242:5;19291:3;19284:4;19276:6;19272:17;19268:27;19258:122;;19299:79;;:::i;:::-;19258:122;19416:6;19403:20;19441:79;19516:3;19508:6;19501:4;19493:6;19489:17;19441:79;:::i;:::-;19432:88;;19248:278;19186:340;;;;:::o;19532:509::-;19601:6;19650:2;19638:9;19629:7;19625:23;19621:32;19618:119;;;19656:79;;:::i;:::-;19618:119;19804:1;19793:9;19789:17;19776:31;19834:18;19826:6;19823:30;19820:117;;;19856:79;;:::i;:::-;19820:117;19961:63;20016:7;20007:6;19996:9;19992:22;19961:63;:::i;:::-;19951:73;;19747:287;19532:509;;;;:::o

Swarm Source

ipfs://cc6a8f3bfa12742258d1dd436c09ba40df86b08492e9e4a4401e704dddb2fa4b

Block Transaction Gas Used Reward
view all blocks collator

Block Uncle Number Difficulty Gas Used Reward
View All Uncles
Loading...
Loading
Loading...
Loading

Validator Index Block Amount
View All Withdrawals

Transaction Hash Block Value Eth2 PubKey Valid
View All Deposits
0x81852B74f14bcD917a72dE8d46f244f6afc2235c
Loading...
Loading
Loading...
Loading

A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.