Contract 0x846e822e9a00669dcC647079d7d625d2cd25A951 1

 

Contract Overview

Balance:
0 Ether

EtherValue:
$0.00

Token:
Txn Hash Method
Index
From
To
Value
0x98a7910335c298aab4b87f82d4505717a59857c08c00762dfddee19bc37475e2Claim Leftovers101504752022-06-02 2:14:18120 days 21 hrs ago0xc6fbaf5fb912eed59c56651f0130d9e11e92d5fe IN  0x846e822e9a00669dcc647079d7d625d2cd25a9510 Ether0.0001633810160.001
0x4fe9b083f5abbee33d663d4824edfca6ef3d66c33c5ac36086193f2942caa98fSet Team100788862022-06-01 20:02:54121 days 3 hrs agoVelodrome Finance: Deployer IN  0x846e822e9a00669dcc647079d7d625d2cd25a9510 Ether0.0006084036630.001
0x0dc70dc0a4522111774d3690a85f0ebde2f4d1fcf46b7e157a823c99d636f1890x61012060100787622022-06-01 20:02:08121 days 3 hrs agoVelodrome Finance: Deployer IN  Create: RedemptionReceiver0 Ether0.0072643840960.001
[ Download CSV Export 
Latest 25 internal transaction
Parent Txn Hash Block From To Value
0x68a14b8bfb805ef2ce8825861d1414973211ce01b36fd2656b48a21b1401f776145821182022-07-15 14:19:0677 days 9 hrs ago 0x846e822e9a00669dcc647079d7d625d2cd25a951 0x7f5c764cbc14f9669b88837ca1490cca17c316070 Ether
0x68a14b8bfb805ef2ce8825861d1414973211ce01b36fd2656b48a21b1401f776145821182022-07-15 14:19:0677 days 9 hrs ago LayerZero: Optimism Endpoint 0x846e822e9a00669dcc647079d7d625d2cd25a9510 Ether
0xd19a9b4f40f539269375c0f1ad30e5e60327935faafbcd577d644fddc6353d8a136517772022-07-01 20:20:1591 days 3 hrs ago 0x846e822e9a00669dcc647079d7d625d2cd25a951 0x7f5c764cbc14f9669b88837ca1490cca17c316070 Ether
0xd19a9b4f40f539269375c0f1ad30e5e60327935faafbcd577d644fddc6353d8a136517772022-07-01 20:20:1591 days 3 hrs ago 0x846e822e9a00669dcc647079d7d625d2cd25a951 0x7f5c764cbc14f9669b88837ca1490cca17c316070 Ether
0xd19a9b4f40f539269375c0f1ad30e5e60327935faafbcd577d644fddc6353d8a136517772022-07-01 20:20:1591 days 3 hrs ago 0xb074ec6c37659525eef2fb44478077901f878012 0x846e822e9a00669dcc647079d7d625d2cd25a9510 Ether
0x1ee24c4db0a57e199fe4c489b5838576fdcd1a2f967ebcfd5778d3fb44a03efd136338272022-07-01 13:57:4991 days 9 hrs ago 0xb074ec6c37659525eef2fb44478077901f878012 0x846e822e9a00669dcc647079d7d625d2cd25a9510 Ether
0x77d4ab0d021feab602f082c2894411dbec9caf72f5fc30efa6b1d94f72032951136336142022-07-01 13:54:5691 days 9 hrs ago 0xb074ec6c37659525eef2fb44478077901f878012 0x846e822e9a00669dcc647079d7d625d2cd25a9510 Ether
0x06cc237e45bab2195d7dd75a6625312a46355e3c6e8e6d51658a51198763d16e135479922022-06-30 16:04:3692 days 7 hrs ago 0x846e822e9a00669dcc647079d7d625d2cd25a951 Velodrome Finance: VELO Token0 Ether
0x06cc237e45bab2195d7dd75a6625312a46355e3c6e8e6d51658a51198763d16e135479922022-06-30 16:04:3692 days 7 hrs ago 0x846e822e9a00669dcc647079d7d625d2cd25a951 0x7f5c764cbc14f9669b88837ca1490cca17c316070 Ether
0x06cc237e45bab2195d7dd75a6625312a46355e3c6e8e6d51658a51198763d16e135479922022-06-30 16:04:3692 days 7 hrs ago LayerZero: Optimism Endpoint 0x846e822e9a00669dcc647079d7d625d2cd25a9510 Ether
0xc02e98a143e8116365b9e34c7cc699b78f161c9c92d487a884bd89741cd46162134051712022-06-28 18:55:0594 days 4 hrs ago 0x846e822e9a00669dcc647079d7d625d2cd25a951 Velodrome Finance: VELO Token0 Ether
0xc02e98a143e8116365b9e34c7cc699b78f161c9c92d487a884bd89741cd46162134051712022-06-28 18:55:0594 days 4 hrs ago 0x846e822e9a00669dcc647079d7d625d2cd25a951 0x7f5c764cbc14f9669b88837ca1490cca17c316070 Ether
0xc02e98a143e8116365b9e34c7cc699b78f161c9c92d487a884bd89741cd46162134051712022-06-28 18:55:0594 days 4 hrs ago LayerZero: Optimism Endpoint 0x846e822e9a00669dcc647079d7d625d2cd25a9510 Ether
0xecc6f6b64e83a9025907e40367a145bb4df2800824373baa6c181a1906a404f7133955442022-06-28 15:51:3494 days 7 hrs ago 0x846e822e9a00669dcc647079d7d625d2cd25a951 Velodrome Finance: VELO Token0 Ether
0xecc6f6b64e83a9025907e40367a145bb4df2800824373baa6c181a1906a404f7133955442022-06-28 15:51:3494 days 7 hrs ago 0x846e822e9a00669dcc647079d7d625d2cd25a951 0x7f5c764cbc14f9669b88837ca1490cca17c316070 Ether
0xecc6f6b64e83a9025907e40367a145bb4df2800824373baa6c181a1906a404f7133955442022-06-28 15:51:3494 days 7 hrs ago LayerZero: Optimism Endpoint 0x846e822e9a00669dcc647079d7d625d2cd25a9510 Ether
0x4b2e6b9bcb5e740b8b321b3a98495a910e62f372ebf1b2ee94e8811937e9fc3b133767042022-06-28 10:10:1094 days 13 hrs ago 0x846e822e9a00669dcc647079d7d625d2cd25a951 Velodrome Finance: VELO Token0 Ether
0x4b2e6b9bcb5e740b8b321b3a98495a910e62f372ebf1b2ee94e8811937e9fc3b133767042022-06-28 10:10:1094 days 13 hrs ago 0x846e822e9a00669dcc647079d7d625d2cd25a951 0x7f5c764cbc14f9669b88837ca1490cca17c316070 Ether
0x4b2e6b9bcb5e740b8b321b3a98495a910e62f372ebf1b2ee94e8811937e9fc3b133767042022-06-28 10:10:1094 days 13 hrs ago LayerZero: Optimism Endpoint 0x846e822e9a00669dcc647079d7d625d2cd25a9510 Ether
0xfb57d11e3fb3d363214593d457c21ab5060b99391fdecc04e00a626f90a4c8b5131946172022-06-26 22:47:3796 days 50 mins ago 0x846e822e9a00669dcc647079d7d625d2cd25a951 Velodrome Finance: VELO Token0 Ether
0xfb57d11e3fb3d363214593d457c21ab5060b99391fdecc04e00a626f90a4c8b5131946172022-06-26 22:47:3796 days 50 mins ago 0x846e822e9a00669dcc647079d7d625d2cd25a951 0x7f5c764cbc14f9669b88837ca1490cca17c316070 Ether
0xfb57d11e3fb3d363214593d457c21ab5060b99391fdecc04e00a626f90a4c8b5131946172022-06-26 22:47:3796 days 50 mins ago LayerZero: Optimism Endpoint 0x846e822e9a00669dcc647079d7d625d2cd25a9510 Ether
0xb534288813a43b81460beb249480cd051ffd450ac4247d899c85c52515e45658131904652022-06-26 21:58:2696 days 1 hr ago 0x846e822e9a00669dcc647079d7d625d2cd25a951 Velodrome Finance: VELO Token0 Ether
0xb534288813a43b81460beb249480cd051ffd450ac4247d899c85c52515e45658131904652022-06-26 21:58:2696 days 1 hr ago 0x846e822e9a00669dcc647079d7d625d2cd25a951 0x7f5c764cbc14f9669b88837ca1490cca17c316070 Ether
0xb534288813a43b81460beb249480cd051ffd450ac4247d899c85c52515e45658131904652022-06-26 21:58:2696 days 1 hr ago LayerZero: Optimism Endpoint 0x846e822e9a00669dcc647079d7d625d2cd25a9510 Ether
[ Download CSV Export 
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
RedemptionReceiver

Compiler Version
v0.8.13+commit.abaa5c0e

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Optimistic.Etherscan.io on 2022-06-01
*/

// SPDX-License-Identifier: MIT
pragma solidity 0.8.13;

interface ILayerZeroUserApplicationConfig {
    // @notice set the configuration of the LayerZero messaging library of the specified version
    // @param _version - messaging library version
    // @param _chainId - the chainId for the pending config change
    // @param _configType - type of configuration. every messaging library has its own convention.
    // @param _config - configuration in the bytes. can encode arbitrary content.
    function setConfig(uint16 _version, uint16 _chainId, uint _configType, bytes calldata _config) external;

    // @notice set the send() LayerZero messaging library version to _version
    // @param _version - new messaging library version
    function setSendVersion(uint16 _version) external;

    // @notice set the lzReceive() LayerZero messaging library version to _version
    // @param _version - new messaging library version
    function setReceiveVersion(uint16 _version) external;

    // @notice Only when the UA needs to resume the message flow in blocking mode and clear the stored payload
    // @param _srcChainId - the chainId of the source chain
    // @param _srcAddress - the contract address of the source contract at the source chain
    function forceResumeReceive(uint16 _srcChainId, bytes calldata _srcAddress) external;
}

interface ILayerZeroEndpoint is ILayerZeroUserApplicationConfig {
    // @notice send a LayerZero message to the specified address at a LayerZero endpoint.
    // @param _dstChainId - the destination chain identifier
    // @param _destination - the address on destination chain (in bytes). address length/format may vary by chains
    // @param _payload - a custom bytes payload to send to the destination contract
    // @param _refundAddress - if the source transaction is cheaper than the amount of value passed, refund the additional amount to this address
    // @param _zroPaymentAddress - the address of the ZRO token holder who would pay for the transaction
    // @param _adapterParams - parameters for custom functionality. e.g. receive airdropped native gas from the relayer on destination
    function send(uint16 _dstChainId, bytes calldata _destination, bytes calldata _payload, address payable _refundAddress, address _zroPaymentAddress, bytes calldata _adapterParams) external payable;

    // @notice used by the messaging library to publish verified payload
    // @param _srcChainId - the source chain identifier
    // @param _srcAddress - the source contract (as bytes) at the source chain
    // @param _dstAddress - the address on destination chain
    // @param _nonce - the unbound message ordering nonce
    // @param _gasLimit - the gas limit for external contract execution
    // @param _payload - verified payload to send to the destination contract
    function receivePayload(uint16 _srcChainId, bytes calldata _srcAddress, address _dstAddress, uint64 _nonce, uint _gasLimit, bytes calldata _payload) external;

    // @notice get the inboundNonce of a receiver from a source chain which could be EVM or non-EVM chain
    // @param _srcChainId - the source chain identifier
    // @param _srcAddress - the source chain contract address
    function getInboundNonce(uint16 _srcChainId, bytes calldata _srcAddress) external view returns (uint64);

    // @notice get the outboundNonce from this source chain which, consequently, is always an EVM
    // @param _srcAddress - the source chain contract address
    function getOutboundNonce(uint16 _dstChainId, address _srcAddress) external view returns (uint64);

    // @notice gets a quote in source native gas, for the amount that send() requires to pay for message delivery
    // @param _dstChainId - the destination chain identifier
    // @param _userApplication - the user app address on this EVM chain
    // @param _payload - the custom message to send over LayerZero
    // @param _payInZRO - if false, user app pays the protocol fee in native token
    // @param _adapterParam - parameters for the adapter service, e.g. send some dust native token to dstChain
    function estimateFees(uint16 _dstChainId, address _userApplication, bytes calldata _payload, bool _payInZRO, bytes calldata _adapterParam) external view returns (uint nativeFee, uint zroFee);

    // @notice get this Endpoint's immutable source identifier
    function getChainId() external view returns (uint16);

    // @notice the interface to retry failed message on this Endpoint destination
    // @param _srcChainId - the source chain identifier
    // @param _srcAddress - the source chain contract address
    // @param _payload - the payload to be retried
    function retryPayload(uint16 _srcChainId, bytes calldata _srcAddress, bytes calldata _payload) external;

    // @notice query if any STORED payload (message blocking) at the endpoint.
    // @param _srcChainId - the source chain identifier
    // @param _srcAddress - the source chain contract address
    function hasStoredPayload(uint16 _srcChainId, bytes calldata _srcAddress) external view returns (bool);

    // @notice query if the _libraryAddress is valid for sending msgs.
    // @param _userApplication - the user app address on this EVM chain
    function getSendLibraryAddress(address _userApplication) external view returns (address);

    // @notice query if the _libraryAddress is valid for receiving msgs.
    // @param _userApplication - the user app address on this EVM chain
    function getReceiveLibraryAddress(address _userApplication) external view returns (address);

    // @notice query if the non-reentrancy guard for send() is on
    // @return true if the guard is on. false otherwise
    function isSendingPayload() external view returns (bool);

    // @notice query if the non-reentrancy guard for receive() is on
    // @return true if the guard is on. false otherwise
    function isReceivingPayload() external view returns (bool);

    // @notice get the configuration of the LayerZero messaging library of the specified version
    // @param _version - messaging library version
    // @param _chainId - the chainId for the pending config change
    // @param _userApplication - the contract address of the user application
    // @param _configType - type of configuration. every messaging library has its own convention.
    function getConfig(uint16 _version, uint16 _chainId, address _userApplication, uint _configType) external view returns (bytes memory);

    // @notice get the send() LayerZero messaging library version
    // @param _userApplication - the contract address of the user application
    function getSendVersion(address _userApplication) external view returns (uint16);

    // @notice get the lzReceive() LayerZero messaging library version
    // @param _userApplication - the contract address of the user application
    function getReceiveVersion(address _userApplication) external view returns (uint16);
}

interface ILayerZeroReceiver {
    // @notice LayerZero endpoint will invoke this function to deliver the message on the destination
    // @param _srcChainId - the source endpoint identifier
    // @param _srcAddress - the source sending contract address from the source chain
    // @param _nonce - the ordered message nonce
    // @param _payload - the signed payload is the UA bytes has encoded to be sent
    function lzReceive(uint16 _srcChainId, bytes calldata _srcAddress, uint64 _nonce, bytes calldata _payload) external;
}

interface IERC20 {
    function totalSupply() external view returns (uint256);
    function transfer(address recipient, uint amount) external returns (bool);
    function decimals() external view returns (uint8);
    function symbol() external view returns (string memory);
    function balanceOf(address) external view returns (uint);
    function transferFrom(address sender, address recipient, uint amount) external returns (bool);
    function allowance(address owner, address spender) external view returns (uint);
    function approve(address spender, uint value) external returns (bool);

    event Transfer(address indexed from, address indexed to, uint value);
    event Approval(address indexed owner, address indexed spender, uint value);
}

interface IVelo {
    function totalSupply() external view returns (uint);
    function balanceOf(address) external view returns (uint);
    function approve(address spender, uint value) external returns (bool);
    function transfer(address, uint) external returns (bool);
    function transferFrom(address,address,uint) external returns (bool);
    function mint(address, uint) external returns (bool);
    function minter() external returns (address);
    function claim(address, uint) external returns (bool);
}

/// @notice Part 2 of 2 in the WeVE (FTM) -> USDC + VELO (OP) redemption process
/// This contract is responsible for receiving the LZ message and distributing USDC + VELO
contract RedemptionReceiver is ILayerZeroReceiver {
    IERC20 public immutable USDC;
    IVelo public immutable VELO;

    uint16 public immutable fantomChainId; // 12 for FTM, 10012 for FTM testnet
    address public immutable endpoint;

    address public team;
    uint256 public immutable deployed;

    address public fantomSender;
    uint256 public constant ELIGIBLE_WEVE = 375112540 * 1e18;
    uint256 public redeemedWEVE;
    uint256 public redeemableUSDC;
    uint256 public redeemableVELO;
    uint256 public leftoverVELO;

    constructor(
        address _usdc,
        address _velo,
        uint16 _fantomChainId,
        address _endpoint
    ) {
        require(_fantomChainId == 12 || _fantomChainId == 10012, "CHAIN_ID_NOT_FTM");

        USDC = IERC20(_usdc);
        VELO = IVelo(_velo);

        fantomChainId = _fantomChainId;
        endpoint = _endpoint;

        team = msg.sender;
        deployed = block.timestamp;
    }

    modifier onlyTeam() {
        require(msg.sender == team, "ONLY_TEAM");
        _;
    }

    event Initialized(address fantomSender, uint256 redeemableUSDC, uint256 redeemableVELO);

    function initializeReceiverWith(
        address _fantomSender,
        uint256 _redeemableUSDC,
        uint256 _redeemableVELO
    ) external onlyTeam {
        require(fantomSender == address(0), "ALREADY_INITIALIZED");
        require(
            USDC.transferFrom(msg.sender, address(this), _redeemableUSDC),
            "USDC_TRANSFER_FAILED"
        );

        fantomSender = _fantomSender;
        redeemableUSDC = _redeemableUSDC;
        redeemableVELO = _redeemableVELO;
        leftoverVELO = _redeemableVELO;

        emit Initialized(fantomSender, redeemableUSDC, redeemableVELO);
    }

    function setTeam(address _team) external onlyTeam {
        team = _team;
    }

    function previewRedeem(uint256 amountWEVE)
        public
        view
        returns (uint256 shareOfUSDC, uint256 shareOfVELO)
    {
        // pro rata USDC
        shareOfUSDC = (amountWEVE * redeemableUSDC) / ELIGIBLE_WEVE;
        // pro rata VELO
        shareOfVELO = (amountWEVE * redeemableVELO) / ELIGIBLE_WEVE;
    }

    function lzReceive(
        uint16 srcChainId,
        bytes memory srcAddress,
        uint64,
        bytes memory payload
    ) external override {
        require(fantomSender != address(0), "NOT_INITIALIZED");
        require(
            msg.sender == endpoint &&
                srcChainId == fantomChainId &&
                addressFromPackedBytes(srcAddress) == fantomSender,
            "UNAUTHORIZED_CALLER"
        );

        (address redemptionAddress, uint256 amountWEVE) = abi.decode(
            payload,
            (address, uint256)
        );

        require(
            (redeemedWEVE += amountWEVE) <= ELIGIBLE_WEVE,
            "cannot redeem more than eligible"
        );
        (uint256 shareOfUSDC, uint256 shareOfVELO) = previewRedeem(amountWEVE);

        require(
            USDC.transfer(redemptionAddress, shareOfUSDC),
            "USDC_TRANSFER_FAILED"
        );

        leftoverVELO -= shareOfVELO; // this will revert if underflows
        require(
            VELO.claim(redemptionAddress, shareOfVELO),
            "CLAIM_FAILED"
        );
    }

    function addressFromPackedBytes(bytes memory toAddressBytes)
        public
        pure
        returns (address toAddress)
    {
        // solhint-disable-next-line no-inline-assembly
        assembly {
            toAddress := mload(add(toAddressBytes, 20))
        }
    }

    function claimLeftovers() external onlyTeam {
        require(block.timestamp >= deployed + 30 days, "LEFTOVERS_NOT_CLAIMABLE");
        require(
            USDC.transfer(msg.sender, USDC.balanceOf(address(this))),
            "USDC_TRANSFER_FAILED"
        );
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"address","name":"_usdc","type":"address"},{"internalType":"address","name":"_velo","type":"address"},{"internalType":"uint16","name":"_fantomChainId","type":"uint16"},{"internalType":"address","name":"_endpoint","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"fantomSender","type":"address"},{"indexed":false,"internalType":"uint256","name":"redeemableUSDC","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"redeemableVELO","type":"uint256"}],"name":"Initialized","type":"event"},{"inputs":[],"name":"ELIGIBLE_WEVE","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"USDC","outputs":[{"internalType":"contract IERC20","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"VELO","outputs":[{"internalType":"contract IVelo","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes","name":"toAddressBytes","type":"bytes"}],"name":"addressFromPackedBytes","outputs":[{"internalType":"address","name":"toAddress","type":"address"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"claimLeftovers","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"deployed","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"endpoint","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"fantomChainId","outputs":[{"internalType":"uint16","name":"","type":"uint16"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"fantomSender","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_fantomSender","type":"address"},{"internalType":"uint256","name":"_redeemableUSDC","type":"uint256"},{"internalType":"uint256","name":"_redeemableVELO","type":"uint256"}],"name":"initializeReceiverWith","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"leftoverVELO","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint16","name":"srcChainId","type":"uint16"},{"internalType":"bytes","name":"srcAddress","type":"bytes"},{"internalType":"uint64","name":"","type":"uint64"},{"internalType":"bytes","name":"payload","type":"bytes"}],"name":"lzReceive","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amountWEVE","type":"uint256"}],"name":"previewRedeem","outputs":[{"internalType":"uint256","name":"shareOfUSDC","type":"uint256"},{"internalType":"uint256","name":"shareOfVELO","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"redeemableUSDC","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"redeemableVELO","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"redeemedWEVE","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_team","type":"address"}],"name":"setTeam","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"team","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"}]

61012060405234801561001157600080fd5b50604051610f81380380610f81833981016040819052610030916100e2565b8161ffff16600c148061004857508161ffff1661271c145b61008b5760405162461bcd60e51b815260206004820152601060248201526f434841494e5f49445f4e4f545f46544d60801b604482015260640160405180910390fd5b6001600160a01b0393841660805291831660a05261ffff1660c0521660e052600080546001600160a01b03191633179055426101005261013f565b80516001600160a01b03811681146100dd57600080fd5b919050565b600080600080608085870312156100f857600080fd5b610101856100c6565b935061010f602086016100c6565b9250604085015161ffff8116811461012657600080fd5b9150610134606086016100c6565b905092959194509250565b60805160a05160c05160e05161010051610dcd6101b4600039600081816102d601526108c00152600081816101940152610352015260008181610245015261037c01526000818161027f015261059f01526000818161021e015281816104d70152818161078e015261094c0152610dcd6000f3fe608060405234801561001057600080fd5b50600436106101155760003560e01c80636bfd23a7116100a2578063a0eeb39a11610071578063a0eeb39a1461027a578063a408bb4c146102a1578063aaa8f2ef146102a9578063b8ea6281146102bc578063f905c15a146102d157600080fd5b80636bfd23a7146101fd57806385f2aef21461020657806389a3027114610219578063997a03b71461024057600080fd5b80634cdad506116100e95780634cdad506146101675780635e280f111461018f57806363b4eb8d146101ce57806368ecc6bc146101e15780636ac55083146101f457600080fd5b80621d35671461011a578063095cf5c61461012f578063221798ad1461014257806347db1a6a1461015e575b600080fd5b61012d610128366004610af9565b6102f8565b005b61012d61013d366004610ba8565b610651565b61014b60045481565b6040519081526020015b60405180910390f35b61014b60035481565b61017a610175366004610bcc565b61069d565b60408051928352602083019190915201610155565b6101b67f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b039091168152602001610155565b6001546101b6906001600160a01b031681565b61012d6101ef366004610be5565b6106f3565b61014b60055481565b61014b60025481565b6000546101b6906001600160a01b031681565b6101b67f000000000000000000000000000000000000000000000000000000000000000081565b6102677f000000000000000000000000000000000000000000000000000000000000000081565b60405161ffff9091168152602001610155565b6101b67f000000000000000000000000000000000000000000000000000000000000000081565b61012d610891565b61014b6b0136492b8a2b999d53f0000081565b6101b66102ca366004610c1a565b6014015190565b61014b7f000000000000000000000000000000000000000000000000000000000000000081565b6001546001600160a01b03166103475760405162461bcd60e51b815260206004820152600f60248201526e1393d517d253925512505312569151608a1b60448201526064015b60405180910390fd5b336001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161480156103a657507f000000000000000000000000000000000000000000000000000000000000000061ffff168461ffff16145b80156103cf57506001546001600160a01b03166103c4846014015190565b6001600160a01b0316145b6104115760405162461bcd60e51b81526020600482015260136024820152722aa720aaaa2427a924ad22a22fa1a0a62622a960691b604482015260640161033e565b600080828060200190518101906104289190610c57565b915091506b0136492b8a2b999d53f00000816002600082825461044b9190610c9b565b925050819055111561049f5760405162461bcd60e51b815260206004820181905260248201527f63616e6e6f742072656465656d206d6f7265207468616e20656c696769626c65604482015260640161033e565b6000806104ab8361069d565b60405163a9059cbb60e01b81526001600160a01b038781166004830152602482018490529294509092507f00000000000000000000000000000000000000000000000000000000000000009091169063a9059cbb906044016020604051808303816000875af1158015610522573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105469190610cb3565b6105625760405162461bcd60e51b815260040161033e90610cd5565b80600560008282546105749190610d03565b9091555050604051635569f64b60e11b81526001600160a01b038581166004830152602482018390527f0000000000000000000000000000000000000000000000000000000000000000169063aad3ec96906044016020604051808303816000875af11580156105e8573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061060c9190610cb3565b6106475760405162461bcd60e51b815260206004820152600c60248201526b10d310525357d1905253115160a21b604482015260640161033e565b5050505050505050565b6000546001600160a01b0316331461067b5760405162461bcd60e51b815260040161033e90610d1a565b600080546001600160a01b0319166001600160a01b0392909216919091179055565b6000806b0136492b8a2b999d53f00000600354846106bb9190610d3d565b6106c59190610d5c565b91506b0136492b8a2b999d53f00000600454846106e29190610d3d565b6106ec9190610d5c565b9050915091565b6000546001600160a01b0316331461071d5760405162461bcd60e51b815260040161033e90610d1a565b6001546001600160a01b03161561076c5760405162461bcd60e51b81526020600482015260136024820152721053149150511657d253925512505312569151606a1b604482015260640161033e565b6040516323b872dd60e01b8152336004820152306024820152604481018390527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906323b872dd906064016020604051808303816000875af11580156107df573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108039190610cb3565b61081f5760405162461bcd60e51b815260040161033e90610cd5565b600180546001600160a01b0319166001600160a01b038516908117909155600383905560048290556005829055604080519182526020820184905281018290527f0f91882b50d9330af0b1d4998e6af7f2eaee90ce7e77ea54fea089af166d021d9060600160405180910390a1505050565b6000546001600160a01b031633146108bb5760405162461bcd60e51b815260040161033e90610d1a565b6108e87f000000000000000000000000000000000000000000000000000000000000000062278d00610c9b565b4210156109375760405162461bcd60e51b815260206004820152601760248201527f4c4546544f564552535f4e4f545f434c41494d41424c45000000000000000000604482015260640161033e565b6040516370a0823160e01b81523060048201527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03169063a9059cbb90339083906370a0823190602401602060405180830381865afa1580156109a5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109c99190610d7e565b6040516001600160e01b031960e085901b1681526001600160a01b03909216600483015260248201526044016020604051808303816000875af1158015610a14573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a389190610cb3565b610a545760405162461bcd60e51b815260040161033e90610cd5565b565b634e487b7160e01b600052604160045260246000fd5b600082601f830112610a7d57600080fd5b813567ffffffffffffffff80821115610a9857610a98610a56565b604051601f8301601f19908116603f01168101908282118183101715610ac057610ac0610a56565b81604052838152866020858801011115610ad957600080fd5b836020870160208301376000602085830101528094505050505092915050565b60008060008060808587031215610b0f57600080fd5b843561ffff81168114610b2157600080fd5b9350602085013567ffffffffffffffff80821115610b3e57600080fd5b610b4a88838901610a6c565b9450604087013591508082168214610b6157600080fd5b90925060608601359080821115610b7757600080fd5b50610b8487828801610a6c565b91505092959194509250565b6001600160a01b0381168114610ba557600080fd5b50565b600060208284031215610bba57600080fd5b8135610bc581610b90565b9392505050565b600060208284031215610bde57600080fd5b5035919050565b600080600060608486031215610bfa57600080fd5b8335610c0581610b90565b95602085013595506040909401359392505050565b600060208284031215610c2c57600080fd5b813567ffffffffffffffff811115610c4357600080fd5b610c4f84828501610a6c565b949350505050565b60008060408385031215610c6a57600080fd5b8251610c7581610b90565b6020939093015192949293505050565b634e487b7160e01b600052601160045260246000fd5b60008219821115610cae57610cae610c85565b500190565b600060208284031215610cc557600080fd5b81518015158114610bc557600080fd5b6020808252601490820152731554d110d7d514905394d1915497d1905253115160621b604082015260600190565b600082821015610d1557610d15610c85565b500390565b6020808252600990820152684f4e4c595f5445414d60b81b604082015260600190565b6000816000190483118215151615610d5757610d57610c85565b500290565b600082610d7957634e487b7160e01b600052601260045260246000fd5b500490565b600060208284031215610d9057600080fd5b505191905056fea2646970667358221220beb010ccf7d75b0c7d19bc7088204052860825d6bc7a924a2051f8574278b82064736f6c634300080d00330000000000000000000000007f5c764cbc14f9669b88837ca1490cca17c316070000000000000000000000003c8b650257cfb5f272f799f5e2b4e65093a11a05000000000000000000000000000000000000000000000000000000000000000c0000000000000000000000003c2269811836af69497e5f486a85d7316753cf62

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

0000000000000000000000007f5c764cbc14f9669b88837ca1490cca17c316070000000000000000000000003c8b650257cfb5f272f799f5e2b4e65093a11a05000000000000000000000000000000000000000000000000000000000000000c0000000000000000000000003c2269811836af69497e5f486a85d7316753cf62

-----Decoded View---------------
Arg [0] : _usdc (address): 0x7f5c764cbc14f9669b88837ca1490cca17c31607
Arg [1] : _velo (address): 0x3c8b650257cfb5f272f799f5e2b4e65093a11a05
Arg [2] : _fantomChainId (uint16): 12
Arg [3] : _endpoint (address): 0x3c2269811836af69497e5f486a85d7316753cf62

-----Encoded View---------------
4 Constructor Arguments found :
Arg [0] : 0000000000000000000000007f5c764cbc14f9669b88837ca1490cca17c31607
Arg [1] : 0000000000000000000000003c8b650257cfb5f272f799f5e2b4e65093a11a05
Arg [2] : 000000000000000000000000000000000000000000000000000000000000000c
Arg [3] : 0000000000000000000000003c2269811836af69497e5f486a85d7316753cf62


Deployed ByteCode Sourcemap

9065:3952:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11314:1125;;;;;;:::i;:::-;;:::i;:::-;;10879:81;;;;;;:::i;:::-;;:::i;9551:29::-;;;;;;;;;2272:25:1;;;2260:2;2245:18;9551:29:0;;;;;;;;9515;;;;;;10968:338;;;;;;:::i;:::-;;:::i;:::-;;;;2667:25:1;;;2723:2;2708:18;;2701:34;;;;2640:18;10968:338:0;2493:248:1;9274:33:0;;;;;;;;-1:-1:-1;;;;;2910:32:1;;;2892:51;;2880:2;2865:18;9274:33:0;2746:203:1;9384:27:0;;;;;-1:-1:-1;;;;;9384:27:0;;;10252:619;;;;;;:::i;:::-;;:::i;9587:27::-;;;;;;9481;;;;;;9316:19;;;;;-1:-1:-1;;;;;9316:19:0;;;9122:28;;;;;9193:37;;;;;;;;3738:6:1;3726:19;;;3708:38;;3696:2;3681:18;9193:37:0;3564:188:1;9157:27:0;;;;;12741:273;;;:::i;9418:56::-;;9458:16;9418:56;;12447:286;;;;;;:::i;:::-;12711:2;12691:23;12685:30;;12447:286;9342:33;;;;;11314:1125;11487:12;;-1:-1:-1;;;;;11487:12:0;11479:54;;;;-1:-1:-1;;;11479:54:0;;4505:2:1;11479:54:0;;;4487:21:1;4544:2;4524:18;;;4517:30;-1:-1:-1;;;4563:18:1;;;4556:45;4618:18;;11479:54:0;;;;;;;;;11566:10;-1:-1:-1;;;;;11580:8:0;11566:22;;:70;;;;;11623:13;11609:27;;:10;:27;;;11566:70;:141;;;;-1:-1:-1;11695:12:0;;-1:-1:-1;;;;;11695:12:0;11657:34;11680:10;12711:2;12691:23;12685:30;;12447:286;11657:34;-1:-1:-1;;;;;11657:50:0;;11566:141;11544:210;;;;-1:-1:-1;;;11544:210:0;;4849:2:1;11544:210:0;;;4831:21:1;4888:2;4868:18;;;4861:30;-1:-1:-1;;;4907:18:1;;;4900:49;4966:18;;11544:210:0;4647:343:1;11544:210:0;11768:25;11795:18;11842:7;11817:76;;;;;;;;;;;;:::i;:::-;11767:126;;;;9458:16;11945:10;11929:12;;:26;;;;;;;:::i;:::-;;;;;;;11928:45;;11906:127;;;;-1:-1:-1;;;11906:127:0;;5787:2:1;11906:127:0;;;5769:21:1;;;5806:18;;;5799:30;5865:34;5845:18;;;5838:62;5917:18;;11906:127:0;5585:356:1;11906:127:0;12045:19;12066;12089:25;12103:10;12089:13;:25::i;:::-;12149:45;;-1:-1:-1;;;12149:45:0;;-1:-1:-1;;;;;6138:32:1;;;12149:45:0;;;6120:51:1;6187:18;;;6180:34;;;12044:70:0;;-1:-1:-1;12044:70:0;;-1:-1:-1;12149:4:0;:13;;;;;;6093:18:1;;12149:45:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;12127:115;;;;-1:-1:-1;;;12127:115:0;;;;;;;:::i;:::-;12271:11;12255:12;;:27;;;;;;;:::i;:::-;;;;-1:-1:-1;;12349:42:0;;-1:-1:-1;;;12349:42:0;;-1:-1:-1;;;;;6138:32:1;;;12349:42:0;;;6120:51:1;6187:18;;;6180:34;;;12349:4:0;:10;;;;6093:18:1;;12349:42:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;12327:104;;;;-1:-1:-1;;;12327:104:0;;7188:2:1;12327:104:0;;;7170:21:1;7227:2;7207:18;;;7200:30;-1:-1:-1;;;7246:18:1;;;7239:42;7298:18;;12327:104:0;6986:336:1;12327:104:0;11468:971;;;;11314:1125;;;;:::o;10879:81::-;10110:4;;-1:-1:-1;;;;;10110:4:0;10096:10;:18;10088:40;;;;-1:-1:-1;;;10088:40:0;;;;;;;:::i;:::-;10940:4:::1;:12:::0;;-1:-1:-1;;;;;;10940:12:0::1;-1:-1:-1::0;;;;;10940:12:0;;;::::1;::::0;;;::::1;::::0;;10879:81::o;10968:338::-;11059:19;11080;9458:16;11171:14;;11158:10;:27;;;;:::i;:::-;11157:45;;;;:::i;:::-;11143:59;;9458:16;11267:14;;11254:10;:27;;;;:::i;:::-;11253:45;;;;:::i;:::-;11239:59;;10968:338;;;:::o;10252:619::-;10110:4;;-1:-1:-1;;;;;10110:4:0;10096:10;:18;10088:40;;;;-1:-1:-1;;;10088:40:0;;;;;;;:::i;:::-;10428:12:::1;::::0;-1:-1:-1;;;;;10428:12:0::1;:26:::0;10420:58:::1;;;::::0;-1:-1:-1;;;10420:58:0;;8261:2:1;10420:58:0::1;::::0;::::1;8243:21:1::0;8300:2;8280:18;;;8273:30;-1:-1:-1;;;8319:18:1;;;8312:49;8378:18;;10420:58:0::1;8059:343:1::0;10420:58:0::1;10511:61;::::0;-1:-1:-1;;;10511:61:0;;10529:10:::1;10511:61;::::0;::::1;8647:34:1::0;10549:4:0::1;8697:18:1::0;;;8690:43;8749:18;;;8742:34;;;10511:4:0::1;-1:-1:-1::0;;;;;10511:17:0::1;::::0;::::1;::::0;8582:18:1;;10511:61:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;10489:131;;;;-1:-1:-1::0;;;10489:131:0::1;;;;;;;:::i;:::-;10633:12;:28:::0;;-1:-1:-1;;;;;;10633:28:0::1;-1:-1:-1::0;;;;;10633:28:0;::::1;::::0;;::::1;::::0;;;10672:14:::1;:32:::0;;;10715:14:::1;:32:::0;;;10758:12:::1;:30:::0;;;10806:57:::1;::::0;;8989:51:1;;;9071:2;9056:18;;9049:34;;;9099:18;;9092:34;;;10806:57:0::1;::::0;8977:2:1;8962:18;10806:57:0::1;;;;;;;10252:619:::0;;;:::o;12741:273::-;10110:4;;-1:-1:-1;;;;;10110:4:0;10096:10;:18;10088:40;;;;-1:-1:-1;;;10088:40:0;;;;;;;:::i;:::-;12823:18:::1;:8;12834:7;12823:18;:::i;:::-;12804:15;:37;;12796:73;;;::::0;-1:-1:-1;;;12796:73:0;;9339:2:1;12796:73:0::1;::::0;::::1;9321:21:1::0;9378:2;9358:18;;;9351:30;9417:25;9397:18;;;9390:53;9460:18;;12796:73:0::1;9137:347:1::0;12796:73:0::1;12928:29;::::0;-1:-1:-1;;;12928:29:0;;12951:4:::1;12928:29;::::0;::::1;2892:51:1::0;12902:4:0::1;-1:-1:-1::0;;;;;12902:13:0::1;::::0;::::1;::::0;12916:10:::1;::::0;12902:13;;12928:14:::1;::::0;2865:18:1;;12928:29:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;12902:56;::::0;-1:-1:-1;;;;;;12902:56:0::1;::::0;;;;;;-1:-1:-1;;;;;6138:32:1;;;12902:56:0::1;::::0;::::1;6120:51:1::0;6187:18;;;6180:34;6093:18;;12902:56:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;12880:126;;;;-1:-1:-1::0;;;12880:126:0::1;;;;;;;:::i;:::-;12741:273::o:0;14:127:1:-;75:10;70:3;66:20;63:1;56:31;106:4;103:1;96:15;130:4;127:1;120:15;146:718;188:5;241:3;234:4;226:6;222:17;218:27;208:55;;259:1;256;249:12;208:55;295:6;282:20;321:18;358:2;354;351:10;348:36;;;364:18;;:::i;:::-;439:2;433:9;407:2;493:13;;-1:-1:-1;;489:22:1;;;513:2;485:31;481:40;469:53;;;537:18;;;557:22;;;534:46;531:72;;;583:18;;:::i;:::-;623:10;619:2;612:22;658:2;650:6;643:18;704:3;697:4;692:2;684:6;680:15;676:26;673:35;670:55;;;721:1;718;711:12;670:55;785:2;778:4;770:6;766:17;759:4;751:6;747:17;734:54;832:1;825:4;820:2;812:6;808:15;804:26;797:37;852:6;843:15;;;;;;146:718;;;;:::o;869:864::-;971:6;979;987;995;1048:3;1036:9;1027:7;1023:23;1019:33;1016:53;;;1065:1;1062;1055:12;1016:53;1104:9;1091:23;1154:6;1147:5;1143:18;1136:5;1133:29;1123:57;;1176:1;1173;1166:12;1123:57;1199:5;-1:-1:-1;1255:2:1;1240:18;;1227:32;1278:18;1308:14;;;1305:34;;;1335:1;1332;1325:12;1305:34;1358:49;1399:7;1390:6;1379:9;1375:22;1358:49;:::i;:::-;1348:59;;1459:2;1448:9;1444:18;1431:32;1416:47;;1507:2;1498:7;1494:16;1485:7;1482:29;1472:57;;1525:1;1522;1515:12;1472:57;1548:7;;-1:-1:-1;1608:2:1;1593:18;;1580:32;;1624:16;;;1621:36;;;1653:1;1650;1643:12;1621:36;;1676:51;1719:7;1708:8;1697:9;1693:24;1676:51;:::i;:::-;1666:61;;;869:864;;;;;;;:::o;1738:131::-;-1:-1:-1;;;;;1813:31:1;;1803:42;;1793:70;;1859:1;1856;1849:12;1793:70;1738:131;:::o;1874:247::-;1933:6;1986:2;1974:9;1965:7;1961:23;1957:32;1954:52;;;2002:1;1999;1992:12;1954:52;2041:9;2028:23;2060:31;2085:5;2060:31;:::i;:::-;2110:5;1874:247;-1:-1:-1;;;1874:247:1:o;2308:180::-;2367:6;2420:2;2408:9;2399:7;2395:23;2391:32;2388:52;;;2436:1;2433;2426:12;2388:52;-1:-1:-1;2459:23:1;;2308:180;-1:-1:-1;2308:180:1:o;2954:383::-;3031:6;3039;3047;3100:2;3088:9;3079:7;3075:23;3071:32;3068:52;;;3116:1;3113;3106:12;3068:52;3155:9;3142:23;3174:31;3199:5;3174:31;:::i;:::-;3224:5;3276:2;3261:18;;3248:32;;-1:-1:-1;3327:2:1;3312:18;;;3299:32;;2954:383;-1:-1:-1;;;2954:383:1:o;3978:320::-;4046:6;4099:2;4087:9;4078:7;4074:23;4070:32;4067:52;;;4115:1;4112;4105:12;4067:52;4155:9;4142:23;4188:18;4180:6;4177:30;4174:50;;;4220:1;4217;4210:12;4174:50;4243:49;4284:7;4275:6;4264:9;4260:22;4243:49;:::i;:::-;4233:59;3978:320;-1:-1:-1;;;;3978:320:1:o;4995:::-;5082:6;5090;5143:2;5131:9;5122:7;5118:23;5114:32;5111:52;;;5159:1;5156;5149:12;5111:52;5191:9;5185:16;5210:31;5235:5;5210:31;:::i;:::-;5305:2;5290:18;;;;5284:25;5260:5;;5284:25;;-1:-1:-1;;;4995:320:1:o;5320:127::-;5381:10;5376:3;5372:20;5369:1;5362:31;5412:4;5409:1;5402:15;5436:4;5433:1;5426:15;5452:128;5492:3;5523:1;5519:6;5516:1;5513:13;5510:39;;;5529:18;;:::i;:::-;-1:-1:-1;5565:9:1;;5452:128::o;6225:277::-;6292:6;6345:2;6333:9;6324:7;6320:23;6316:32;6313:52;;;6361:1;6358;6351:12;6313:52;6393:9;6387:16;6446:5;6439:13;6432:21;6425:5;6422:32;6412:60;;6468:1;6465;6458:12;6507:344;6709:2;6691:21;;;6748:2;6728:18;;;6721:30;-1:-1:-1;;;6782:2:1;6767:18;;6760:50;6842:2;6827:18;;6507:344::o;6856:125::-;6896:4;6924:1;6921;6918:8;6915:34;;;6929:18;;:::i;:::-;-1:-1:-1;6966:9:1;;6856:125::o;7327:332::-;7529:2;7511:21;;;7568:1;7548:18;;;7541:29;-1:-1:-1;;;7601:2:1;7586:18;;7579:39;7650:2;7635:18;;7327:332::o;7664:168::-;7704:7;7770:1;7766;7762:6;7758:14;7755:1;7752:21;7747:1;7740:9;7733:17;7729:45;7726:71;;;7777:18;;:::i;:::-;-1:-1:-1;7817:9:1;;7664:168::o;7837:217::-;7877:1;7903;7893:132;;7947:10;7942:3;7938:20;7935:1;7928:31;7982:4;7979:1;7972:15;8010:4;8007:1;8000:15;7893:132;-1:-1:-1;8039:9:1;;7837:217::o;9489:184::-;9559:6;9612:2;9600:9;9591:7;9587:23;9583:32;9580:52;;;9628:1;9625;9618:12;9580:52;-1:-1:-1;9651:16:1;;9489:184;-1:-1:-1;9489:184:1:o

Swarm Source

ipfs://beb010ccf7d75b0c7d19bc7088204052860825d6bc7a924a2051f8574278b820
Block Transaction Difficulty Gas Used Reward
Block Uncle Number Difficulty Gas Used Reward
Loading
Loading
Make sure to use the "Vote Down" button for any spammy posts, and the "Vote Up" for interesting conversations.