AVAX Price: $22.78 (+11.25%)
Gas: 1.7 nAVAX
 

Multichain Info

1 address found via
Transaction Hash
Method
Block
From
To
Deposit With Exp...607959052025-04-23 12:28:0231 mins ago1745411282IN
THORChain: AvaxRouter
1 AVAX0.000068511.61218095
Deposit With Exp...607955212025-04-23 12:19:1540 mins ago1745410755IN
THORChain: AvaxRouter
747.66537267 AVAX0.0029308370
Deposit With Exp...607955012025-04-23 12:18:5041 mins ago1745410730IN
THORChain: AvaxRouter
538.70504945 AVAX0.000019250.46008428
Deposit With Exp...607954842025-04-23 12:18:3041 mins ago1745410710IN
THORChain: AvaxRouter
250 AVAX0.0000431.01
Deposit With Exp...607954672025-04-23 12:18:0241 mins ago1745410682IN
THORChain: AvaxRouter
1,081.77427372 AVAX0.000005910.14135276
Transfer Out607954212025-04-23 12:16:4743 mins ago1745410607IN
THORChain: AvaxRouter
3.91702571 AVAX0.003378450
Transfer Out607941032025-04-23 11:47:061 hr ago1745408826IN
THORChain: AvaxRouter
9.18550363 AVAX0.00212950
Transfer Out607930172025-04-23 11:22:281 hr ago1745407348IN
THORChain: AvaxRouter
420.5875441 AVAX0.002129650
Transfer Out607920912025-04-23 11:01:161 hr ago1745406076IN
THORChain: AvaxRouter
754.4461034 AVAX0.002129650
Deposit With Exp...607917382025-04-23 10:52:592 hrs ago1745405579IN
THORChain: AvaxRouter
1 AVAX0.000121222.85333628
Transfer Out607902122025-04-23 10:17:162 hrs ago1745403436IN
THORChain: AvaxRouter
60.91500092 AVAX0.003379650
Deposit With Exp...607894672025-04-23 10:02:152 hrs ago1745402535IN
THORChain: AvaxRouter
987.33350428 AVAX0.000007910.18920873
Transfer Out607884982025-04-23 9:40:093 hrs ago1745401209IN
THORChain: AvaxRouter
1,000.52654904 AVAX0.002129650
Transfer Out607856332025-04-23 8:32:474 hrs ago1745397167IN
THORChain: AvaxRouter
2.4124766 AVAX0.00337950
Deposit With Exp...607854242025-04-23 8:28:104 hrs ago1745396890IN
THORChain: AvaxRouter
1,005.28746587 AVAX0.000005410.12930823
Deposit With Exp...607818332025-04-23 7:07:005 hrs ago1745392020IN
THORChain: AvaxRouter
263.2304 AVAX0.000023820.56893987
Transfer Out607801132025-04-23 6:27:156 hrs ago1745389635IN
THORChain: AvaxRouter
8.07257478 AVAX0.00337950
Deposit With Exp...607799472025-04-23 6:23:416 hrs ago1745389421IN
THORChain: AvaxRouter
1.23 AVAX0.000004670.11004707
Transfer Out607796832025-04-23 6:17:446 hrs ago1745389064IN
THORChain: AvaxRouter
776.09762147 AVAX0.002129650
Transfer Out607792022025-04-23 6:06:276 hrs ago1745388387IN
THORChain: AvaxRouter
407.87883558 AVAX0.002129650
Transfer Out607752822025-04-23 4:36:528 hrs ago1745383012IN
THORChain: AvaxRouter
1,003.94567537 AVAX0.002129650
Transfer Out607751282025-04-23 4:33:218 hrs ago1745382801IN
THORChain: AvaxRouter
767.69208308 AVAX0.002129650
Deposit With Exp...607730902025-04-23 3:45:409 hrs ago1745379940IN
THORChain: AvaxRouter
33.65 AVAX0.000004510.10609234
Transfer Out607712382025-04-23 3:01:029 hrs ago1745377262IN
THORChain: AvaxRouter
10.8400423 AVAX0.00212950
Deposit With Exp...607707882025-04-23 2:51:0710 hrs ago1745376667IN
THORChain: AvaxRouter
3.85910057 AVAX0.0010582925.19335333
VIEW ADVANCED FILTER

Latest 25 internal transactions (View All)

Parent Transaction Hash Block From To
607959052025-04-23 12:28:0231 mins ago1745411282
THORChain: AvaxRouter
1 AVAX
607955212025-04-23 12:19:1540 mins ago1745410755
THORChain: AvaxRouter
747.66537267 AVAX
607955012025-04-23 12:18:5041 mins ago1745410730
THORChain: AvaxRouter
538.70504945 AVAX
607954842025-04-23 12:18:3041 mins ago1745410710
THORChain: AvaxRouter
250 AVAX
607954672025-04-23 12:18:0241 mins ago1745410682
THORChain: AvaxRouter
1,081.77427372 AVAX
607954212025-04-23 12:16:4743 mins ago1745410607
THORChain: AvaxRouter
3.91702571 AVAX
607941032025-04-23 11:47:061 hr ago1745408826
THORChain: AvaxRouter
9.18550363 AVAX
607930172025-04-23 11:22:281 hr ago1745407348
THORChain: AvaxRouter
420.5875441 AVAX
607920912025-04-23 11:01:161 hr ago1745406076
THORChain: AvaxRouter
754.4461034 AVAX
607917382025-04-23 10:52:592 hrs ago1745405579
THORChain: AvaxRouter
1 AVAX
607902122025-04-23 10:17:162 hrs ago1745403436
THORChain: AvaxRouter
60.91500092 AVAX
607894672025-04-23 10:02:152 hrs ago1745402535
THORChain: AvaxRouter
987.33350428 AVAX
607894112025-04-23 10:01:122 hrs ago1745402472
THORChain: AvaxRouter
0.4 AVAX
607884982025-04-23 9:40:093 hrs ago1745401209
THORChain: AvaxRouter
1,000.52654904 AVAX
607856332025-04-23 8:32:474 hrs ago1745397167
THORChain: AvaxRouter
2.4124766 AVAX
607854242025-04-23 8:28:104 hrs ago1745396890
THORChain: AvaxRouter
1,005.28746587 AVAX
607824582025-04-23 7:20:475 hrs ago1745392847
THORChain: AvaxRouter
0.36642389 AVAX
607818332025-04-23 7:07:005 hrs ago1745392020
THORChain: AvaxRouter
263.2304 AVAX
607801132025-04-23 6:27:156 hrs ago1745389635
THORChain: AvaxRouter
8.07257478 AVAX
607799472025-04-23 6:23:416 hrs ago1745389421
THORChain: AvaxRouter
1.23 AVAX
607796832025-04-23 6:17:446 hrs ago1745389064
THORChain: AvaxRouter
776.09762147 AVAX
607792022025-04-23 6:06:276 hrs ago1745388387
THORChain: AvaxRouter
407.87883558 AVAX
607783082025-04-23 5:45:007 hrs ago1745387100
THORChain: AvaxRouter
7.98631155 AVAX
607783082025-04-23 5:45:007 hrs ago1745387100
THORChain: AvaxRouter
7.98631155 AVAX
607752822025-04-23 4:36:528 hrs ago1745383012
THORChain: AvaxRouter
1,003.94567537 AVAX
View All Internal Transactions
Loading...
Loading

Similar Match Source Code
This contract matches the deployed Bytecode of the Source Code for Contract 0xd6a6C0b3...989209Db6
The constructor portion of the code might be different and could alter the actual behaviour of the contract

Contract Name:
AvaxRouter

Compiler Version
v0.8.9+commit.e5eed63a

Optimization Enabled:
Yes with 100000 runs

Other Settings:
default evmVersion
File 1 of 3 : AvaxRouter.sol
// SPDX-License-Identifier: AGPL-3.0-or-later
pragma solidity 0.8.9;

import "../interfaces/IARC20.sol";

interface IRouter {
    function depositWithExpiry(
        address,
        address,
        uint256,
        string calldata,
        uint256
    ) external;
}

// THORChain_Router is managed by THORChain Vaults
contract AvaxRouter {
    struct Coin {
        address asset;
        uint256 amount;
    }

    // Vault allowance for each asset
    mapping(address => mapping(address => uint256)) private _vaultAllowance;

    uint256 private constant _NOT_ENTERED = 1;
    uint256 private constant _ENTERED = 2;
    uint256 private _status;

    // Emitted for all deposits, the memo distinguishes for swap, add, remove, donate etc
    event Deposit(
        address indexed to,
        address indexed asset,
        uint256 amount,
        string memo
    );

    // Emitted for all outgoing transfers, the vault dictates who sent it, memo used to track.
    event TransferOut(
        address indexed vault,
        address indexed to,
        address asset,
        uint256 amount,
        string memo
    );

    // Emitted for all outgoing transferAndCalls, the vault dictates who sent it, memo used to track.
    event TransferOutAndCall(
        address indexed vault,
        address target,
        uint256 amount,
        address finalAsset,
        address to,
        uint256 amountOutMin,
        string memo
    );

    // Changes the spend allowance between vaults
    event TransferAllowance(
        address indexed oldVault,
        address indexed newVault,
        address asset,
        uint256 amount,
        string memo
    );

    // Specifically used to batch send the entire vault assets
    event VaultTransfer(
        address indexed oldVault,
        address indexed newVault,
        Coin[] coins,
        string memo
    );

    modifier nonReentrant() {
        require(_status != _ENTERED, "ReentrancyGuard: reentrant call");
        _status = _ENTERED;
        _;
        _status = _NOT_ENTERED;
    }

    constructor() {
        _status = _NOT_ENTERED;
    }

    /**
     * @notice Calls deposit with an experation
     * @param vault address - vault address for router
     * @param asset address - ARC20 asset or zero address for AVAX
     * @param amount uint - amount to deposit
     * @param memo string - tx memo
     * @param expiration string - timestamp for expiration
     */
    function depositWithExpiry(
        address payable vault,
        address asset,
        uint256 amount,
        string memory memo,
        uint256 expiration
    ) external payable {
        require(block.timestamp < expiration, "THORChain_Router: expired");
        deposit(vault, asset, amount, memo);
    }

    /**
     * @notice Deposit an asset with a memo. Avax is forwarded, ARC-20 stays in ROUTER
     * @param vault address - vault address for router
     * @param asset address - ARC20 asset or zero address for AVAX
     * @param amount uint - amount to deposit
     * @param memo string - transaction memo
     */
    function deposit(
        address payable vault,
        address asset,
        uint256 amount,
        string memory memo
    ) public payable nonReentrant {
        uint256 safeAmount;
        if (asset == address(0)) {
            safeAmount = msg.value;
            bool success = vault.send(safeAmount);
            require(success, "Send Failed");
        } else {
            require(msg.value == 0, "unexpected avax"); // protect user from accidentally locking up AVAX

            safeAmount = safeTransferFrom(asset, amount); // Transfer asset
            _vaultAllowance[vault][asset] += safeAmount; // Credit to chosen vault
        }
        emit Deposit(vault, asset, safeAmount, memo);
    }

    /**
     * @notice Use for "moving" assets between vaults (asgard<>ygg), as well "churning" to a new Asgard
     * @param router address - current vault address for router
     * @param newVault address - new vault address for router
     * @param asset address - ARC20 asset or zero address for AVAX
     * @param amount uint - allowance amount to transfer
     * @param memo string - transaction memo
     */
    function transferAllowance(
        address router,
        address newVault,
        address asset,
        uint256 amount,
        string memory memo
    ) external nonReentrant {
        if (router == address(this)) {
            _adjustAllowances(newVault, asset, amount);
            emit TransferAllowance(msg.sender, newVault, asset, amount, memo);
        } else {
            _routerDeposit(router, newVault, asset, amount, memo);
        }
    }

    /**
     * @notice All vault calls to transfer any asset to any recipient go through here.
     * @dev Note: Contract recipients of AVAX are only given 2300 Gas to complete execution.
     * @param to address - current vault address for router
     * @param asset address - ARC20 asset or zero address for AVAX
     * @param amount uint - allowance amount to transfer
     * @param memo string - transaction memo
     */
    function transferOut(
        address payable to,
        address asset,
        uint256 amount,
        string memory memo
    ) public payable nonReentrant {
        uint256 safeAmount;
        if (asset == address(0)) {
            safeAmount = msg.value;
            bool success = to.send(safeAmount); // Send AVAX.
            if (!success) {
                payable(address(msg.sender)).transfer(safeAmount); // For failure, bounce back to Yggdrasil & continue.
            }
        } else {
            _vaultAllowance[msg.sender][asset] -= amount; // Reduce allowance
            (bool success, bytes memory data) = asset.call(
                abi.encodeWithSignature("transfer(address,uint256)", to, amount)
            );
            require(success && (data.length == 0 || abi.decode(data, (bool))), "transfer out failed");
            safeAmount = amount;
        }
        emit TransferOut(msg.sender, to, asset, safeAmount, memo);
    }

    /**
     * @notice Any vault calls to transferAndCall on a target contract that conforms with "swapOut(address,address,uint256)"
     * @dev Example Memo: "~1b3:AVAX.0xFinalToken:0xTo:
     * @dev Target is fuzzy-matched to the last three digits of whitelisted aggregators
     * @dev FinalToken, To, amountOutMin come from originating memo
     * @param target address - current vault address for router
     * @param finalToken address - ARC20 asset or zero address for AVAX
     * @param to address - address to send swapped assets to
     * @param amountOutMin uint - allowance amount to transfer
     * @param memo string - transaction memo of type "OUT:HASH"
     */
    function transferOutAndCall(
        address payable target,
        address finalToken,
        address to,
        uint256 amountOutMin,
        string memory memo
    ) public payable nonReentrant {
        uint256 _safeAmount = msg.value;
        (bool arc20Success, ) = target.call{value: _safeAmount}(
            abi.encodeWithSignature(
                "swapOut(address,address,uint256)",
                finalToken,
                to,
                amountOutMin
            )
        );
        if (!arc20Success) {
            bool avaxSuccess = payable(to).send(_safeAmount); // If can't swap, just send the recipient the AVAX
            if (!avaxSuccess) {
                payable(address(msg.sender)).transfer(_safeAmount); // For failure, bounce back to Yggdrasil & continue.
            }
        }
        emit TransferOutAndCall(
            msg.sender,
            target,
            _safeAmount,
            finalToken,
            to,
            amountOutMin,
            memo
        );
    }

    /**
     * @notice  A vault can call to "return" all assets to an asgard, including AVAX.
     * @param router address - current vault address for router
     * @param asgard address - current address for asgard
     * @param coins Coin[] - ARC20/AVAX in vault - { asset: address, amount: uint }
     * @param memo string - transaction memo
     */
    function returnVaultAssets(
        address router,
        address payable asgard,
        Coin[] memory coins,
        string memory memo
    ) external payable nonReentrant {
        if (router == address(this)) {
            for (uint256 i = 0; i < coins.length; i++) {
                _adjustAllowances(asgard, coins[i].asset, coins[i].amount);
            }
            emit VaultTransfer(msg.sender, asgard, coins, memo); // Does not include AVAX.
        } else {
            for (uint256 i = 0; i < coins.length; i++) {
                _routerDeposit(
                    router,
                    asgard,
                    coins[i].asset,
                    coins[i].amount,
                    memo
                );
            }
        }
        bool success = asgard.send(msg.value);
        require(success, "return vault assets failed");
    }

    /**
     * @notice Checks allowance of vault.
     * @param vault address - current vault address for router
     * @param token address - token to check allowance
     */
    function vaultAllowance(address vault, address token)
        public
        view
        returns (uint256 amount)
    {
        return _vaultAllowance[vault][token];
    }

    /**
     * @notice Safe transferFrom in case asset charges transfer fees
     * @param _asset address - asset that will transferFrom
     * @param _amount uint - amount to transfer
     */
    function safeTransferFrom(address _asset, uint256 _amount)
        internal
        returns (uint256 amount)
    {
        uint256 _startBal = IARC20(_asset).balanceOf(address(this));
        (bool success, bytes memory data) = _asset.call(
            abi.encodeWithSignature(
                "transferFrom(address,address,uint256)",
                msg.sender,
                address(this),
                _amount
            )
        );
        require(
            success && (data.length == 0 || abi.decode(data, (bool))),
            "Failed To TransferFrom"
        );
        return (IARC20(_asset).balanceOf(address(this)) - _startBal);
    }

    /**
     * @notice Decrements and Increments Allowances between two vaults
     * @param _newVault address - new vault to receive the allowance
     * @param _asset address - asset that has the allowance
     * @param _amount uint - amount of allowance to transfer
     */
    function _adjustAllowances(
        address _newVault,
        address _asset,
        uint256 _amount
    ) internal {
        _vaultAllowance[msg.sender][_asset] -= _amount;
        _vaultAllowance[_newVault][_asset] += _amount;
    }

    /**
     * @notice Adjusts allowance and forwards funds to new router, credits allowance to desired vault
     * @param _router address - current router address
     * @param _vault address - vault to deposit to
     * @param _asset address - ARC20 asset or zero address for AVAX
     * @param _amount uint - amount to transfer
     */
    function _routerDeposit(
        address _router,
        address _vault,
        address _asset,
        uint256 _amount,
        string memory _memo
    ) internal {
        _vaultAllowance[msg.sender][_asset] -= _amount;
        (bool success, ) = _asset.call(
            abi.encodeWithSignature(
                "approve(address,uint256)",
                _router,
                _amount
            )
        ); // Approve to transfer
        require(success, "router deposit failed");
        IRouter(_router).depositWithExpiry(
            _vault,
            _asset,
            _amount,
            _memo,
            type(uint256).max
        ); // Transfer by depositing
    }
}

File 2 of 3 : IARC20.sol
// SPDX-License-Identifier: AGPL-3.0-or-later
pragma solidity 0.8.9;

import "@openzeppelin/contracts/token/ERC20/IERC20.sol";

interface IARC20 is IERC20 {}

File 3 of 3 : IERC20.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v4.6.0) (token/ERC20/IERC20.sol)

pragma solidity ^0.8.0;

/**
 * @dev Interface of the ERC20 standard as defined in the EIP.
 */
interface IERC20 {
    /**
     * @dev Emitted when `value` tokens are moved from one account (`from`) to
     * another (`to`).
     *
     * Note that `value` may be zero.
     */
    event Transfer(address indexed from, address indexed to, uint256 value);

    /**
     * @dev Emitted when the allowance of a `spender` for an `owner` is set by
     * a call to {approve}. `value` is the new allowance.
     */
    event Approval(address indexed owner, address indexed spender, uint256 value);

    /**
     * @dev Returns the amount of tokens in existence.
     */
    function totalSupply() external view returns (uint256);

    /**
     * @dev Returns the amount of tokens owned by `account`.
     */
    function balanceOf(address account) external view returns (uint256);

    /**
     * @dev Moves `amount` tokens from the caller's account to `to`.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * Emits a {Transfer} event.
     */
    function transfer(address to, uint256 amount) external returns (bool);

    /**
     * @dev Returns the remaining number of tokens that `spender` will be
     * allowed to spend on behalf of `owner` through {transferFrom}. This is
     * zero by default.
     *
     * This value changes when {approve} or {transferFrom} are called.
     */
    function allowance(address owner, address spender) external view returns (uint256);

    /**
     * @dev Sets `amount` as the allowance of `spender` over the caller's tokens.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * IMPORTANT: Beware that changing an allowance with this method brings the risk
     * that someone may use both the old and the new allowance by unfortunate
     * transaction ordering. One possible solution to mitigate this race
     * condition is to first reduce the spender's allowance to 0 and set the
     * desired value afterwards:
     * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729
     *
     * Emits an {Approval} event.
     */
    function approve(address spender, uint256 amount) external returns (bool);

    /**
     * @dev Moves `amount` tokens from `from` to `to` using the
     * allowance mechanism. `amount` is then deducted from the caller's
     * allowance.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * Emits a {Transfer} event.
     */
    function transferFrom(
        address from,
        address to,
        uint256 amount
    ) external returns (bool);
}

Settings
{
  "optimizer": {
    "enabled": true,
    "runs": 100000
  },
  "outputSelection": {
    "*": {
      "*": [
        "evm.bytecode",
        "evm.deployedBytecode",
        "devdoc",
        "userdoc",
        "metadata",
        "abi"
      ]
    }
  },
  "metadata": {
    "useLiteralContent": true
  },
  "libraries": {}
}

Contract Security Audit

Contract ABI

API
[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":true,"internalType":"address","name":"asset","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"},{"indexed":false,"internalType":"string","name":"memo","type":"string"}],"name":"Deposit","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"oldVault","type":"address"},{"indexed":true,"internalType":"address","name":"newVault","type":"address"},{"indexed":false,"internalType":"address","name":"asset","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"},{"indexed":false,"internalType":"string","name":"memo","type":"string"}],"name":"TransferAllowance","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"vault","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"address","name":"asset","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"},{"indexed":false,"internalType":"string","name":"memo","type":"string"}],"name":"TransferOut","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"vault","type":"address"},{"indexed":false,"internalType":"address","name":"target","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"},{"indexed":false,"internalType":"address","name":"finalAsset","type":"address"},{"indexed":false,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"amountOutMin","type":"uint256"},{"indexed":false,"internalType":"string","name":"memo","type":"string"}],"name":"TransferOutAndCall","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"oldVault","type":"address"},{"indexed":true,"internalType":"address","name":"newVault","type":"address"},{"components":[{"internalType":"address","name":"asset","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"indexed":false,"internalType":"struct AvaxRouter.Coin[]","name":"coins","type":"tuple[]"},{"indexed":false,"internalType":"string","name":"memo","type":"string"}],"name":"VaultTransfer","type":"event"},{"inputs":[{"internalType":"address payable","name":"vault","type":"address"},{"internalType":"address","name":"asset","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"string","name":"memo","type":"string"}],"name":"deposit","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address payable","name":"vault","type":"address"},{"internalType":"address","name":"asset","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"string","name":"memo","type":"string"},{"internalType":"uint256","name":"expiration","type":"uint256"}],"name":"depositWithExpiry","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"router","type":"address"},{"internalType":"address payable","name":"asgard","type":"address"},{"components":[{"internalType":"address","name":"asset","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"internalType":"struct AvaxRouter.Coin[]","name":"coins","type":"tuple[]"},{"internalType":"string","name":"memo","type":"string"}],"name":"returnVaultAssets","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"router","type":"address"},{"internalType":"address","name":"newVault","type":"address"},{"internalType":"address","name":"asset","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"string","name":"memo","type":"string"}],"name":"transferAllowance","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address payable","name":"to","type":"address"},{"internalType":"address","name":"asset","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"string","name":"memo","type":"string"}],"name":"transferOut","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address payable","name":"target","type":"address"},{"internalType":"address","name":"finalToken","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amountOutMin","type":"uint256"},{"internalType":"string","name":"memo","type":"string"}],"name":"transferOutAndCall","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"vault","type":"address"},{"internalType":"address","name":"token","type":"address"}],"name":"vaultAllowance","outputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"stateMutability":"view","type":"function"}]

Deployed Bytecode

0x6080604052600436106100705760003560e01c80632923e82e1161004e5780632923e82e1461010d5780634039fd4b1461012057806344bc937b14610133578063574da7171461014657600080fd5b806303b6a673146100755780631b738b32146100d85780631fece7b4146100fa575b600080fd5b34801561008157600080fd5b506100c661009036600461132b565b73ffffffffffffffffffffffffffffffffffffffff91821660009081526020818152604080832093909416825291909152205490565b60405190815260200160405180910390f35b3480156100e457600080fd5b506100f86100f3366004611499565b610159565b005b6100f8610108366004611518565b61027f565b6100f861011b366004611584565b6104e5565b6100f861012e366004611499565b610748565b6100f8610141366004611697565b610993565b6100f8610154366004611518565b610a0f565b600260015414156101cb576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064015b60405180910390fd5b600260015573ffffffffffffffffffffffffffffffffffffffff8516301415610267576101f9848484610d40565b8373ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f05b90458f953d3fcb2d7fb25616a2fddeca749d0c47cc5c9832d0266b5346eea85858560405161025a93929190611785565b60405180910390a3610274565b6102748585858585610dcf565b505060018055505050565b600260015414156102ec576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016101c2565b6002600155600073ffffffffffffffffffffffffffffffffffffffff84166103b45750604051349060009073ffffffffffffffffffffffffffffffffffffffff87169083156108fc0290849084818181858888f193505050509050806103ae576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600b60248201527f53656e64204661696c656400000000000000000000000000000000000000000060448201526064016101c2565b50610473565b341561041c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600f60248201527f756e65787065637465642061766178000000000000000000000000000000000060448201526064016101c2565b6104268484611025565b73ffffffffffffffffffffffffffffffffffffffff80871660009081526020818152604080832093891683529290529081208054929350839290919061046d9084906117f2565b90915550505b8373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167fef519b7eb82aaf6ac376a6df2d793843ebfd593de5f1a0601d3cc6ab49ebb39583856040516104d292919061180a565b60405180910390a3505060018055505050565b60026001541415610552576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016101c2565b600260015573ffffffffffffffffffffffffffffffffffffffff84163014156106455760005b82518110156105d8576105c6848483815181106105975761059761182b565b6020026020010151600001518584815181106105b5576105b561182b565b602002602001015160200151610d40565b806105d08161185a565b915050610578565b508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f281daef48d91e5cd3d32db0784f6af69cd8d8d2e8c612a3568dca51ded51e08f8484604051610638929190611893565b60405180910390a36106ac565b60005b82518110156106aa5761069885858584815181106106685761066861182b565b6020026020010151600001518685815181106106865761068661182b565b60200260200101516020015186610dcf565b806106a28161185a565b915050610648565b505b60405160009073ffffffffffffffffffffffffffffffffffffffff8516903480156108fc029184818181858888f19350505050905080610274576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601a60248201527f72657475726e207661756c7420617373657473206661696c656400000000000060448201526064016101c2565b600260015414156107b5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016101c2565b600260015560405173ffffffffffffffffffffffffffffffffffffffff858116602483015284811660448301526064820184905234916000918816908390608401604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f48c314f40000000000000000000000000000000000000000000000000000000017905251610877919061190b565b60006040518083038185875af1925050503d80600081146108b4576040519150601f19603f3d011682016040523d82523d6000602084013e6108b9565b606091505b505090508061092e5760405160009073ffffffffffffffffffffffffffffffffffffffff87169084156108fc0290859084818181858888f1935050505090508061092c57604051339084156108fc029085906000818181858888f1935050505015801561092a573d6000803e3d6000fd5b505b505b3373ffffffffffffffffffffffffffffffffffffffff167f8e5841bcd195b858d53b38bcf91b38d47f3bc800469b6812d35451ab619c6f6c88848989898960405161097e96959493929190611927565b60405180910390a25050600180555050505050565b8042106109fc576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601960248201527f54484f52436861696e5f526f757465723a20657870697265640000000000000060448201526064016101c2565b610a088585858561027f565b5050505050565b60026001541415610a7c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016101c2565b6002600155600073ffffffffffffffffffffffffffffffffffffffff8416610b115750604051349060009073ffffffffffffffffffffffffffffffffffffffff87169083156108fc0290849084818181858888f19350505050905080610b0b57604051339083156108fc029084906000818181858888f19350505050158015610b09573d6000803e3d6000fd5b505b50610cdf565b3360009081526020818152604080832073ffffffffffffffffffffffffffffffffffffffff8816845290915281208054859290610b4f908490611980565b909155505060405173ffffffffffffffffffffffffffffffffffffffff8681166024830152604482018590526000918291871690606401604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fa9059cbb0000000000000000000000000000000000000000000000000000000017905251610c07919061190b565b6000604051808303816000865af19150503d8060008114610c44576040519150601f19603f3d011682016040523d82523d6000602084013e610c49565b606091505b5091509150818015610c73575080511580610c73575080806020019051810190610c739190611997565b610cd9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601360248201527f7472616e73666572206f7574206661696c65640000000000000000000000000060448201526064016101c2565b84925050505b8473ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167fa9cd03aa3c1b4515114539cd53d22085129d495cb9e9f9af77864526240f1bf78684866040516104d293929190611785565b3360009081526020818152604080832073ffffffffffffffffffffffffffffffffffffffff8616845290915281208054839290610d7e908490611980565b909155505073ffffffffffffffffffffffffffffffffffffffff80841660009081526020818152604080832093861683529290529081208054839290610dc59084906117f2565b9091555050505050565b3360009081526020818152604080832073ffffffffffffffffffffffffffffffffffffffff8716845290915281208054849290610e0d908490611980565b909155505060405173ffffffffffffffffffffffffffffffffffffffff86811660248301526044820184905260009190851690606401604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f095ea7b30000000000000000000000000000000000000000000000000000000017905251610ec4919061190b565b6000604051808303816000865af19150503d8060008114610f01576040519150601f19603f3d011682016040523d82523d6000602084013e610f06565b606091505b5050905080610f71576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601560248201527f726f75746572206465706f736974206661696c6564000000000000000000000060448201526064016101c2565b6040517f44bc937b00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8716906344bc937b90610feb9088908890889088907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff906004016119c0565b600060405180830381600087803b15801561100557600080fd5b505af1158015611019573d6000803e3d6000fd5b50505050505050505050565b6040517f70a08231000000000000000000000000000000000000000000000000000000008152306004820152600090819073ffffffffffffffffffffffffffffffffffffffff8516906370a082319060240160206040518083038186803b15801561108f57600080fd5b505afa1580156110a3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110c79190611a11565b60405133602482015230604482015260648101859052909150600090819073ffffffffffffffffffffffffffffffffffffffff871690608401604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f23b872dd0000000000000000000000000000000000000000000000000000000017905251611181919061190b565b6000604051808303816000865af19150503d80600081146111be576040519150601f19603f3d011682016040523d82523d6000602084013e6111c3565b606091505b50915091508180156111ed5750805115806111ed5750808060200190518101906111ed9190611997565b611253576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f4661696c656420546f205472616e7366657246726f6d0000000000000000000060448201526064016101c2565b6040517f70a08231000000000000000000000000000000000000000000000000000000008152306004820152839073ffffffffffffffffffffffffffffffffffffffff8816906370a082319060240160206040518083038186803b1580156112ba57600080fd5b505afa1580156112ce573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112f29190611a11565b6112fc9190611980565b9695505050505050565b73ffffffffffffffffffffffffffffffffffffffff8116811461132857600080fd5b50565b6000806040838503121561133e57600080fd5b823561134981611306565b9150602083013561135981611306565b809150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040805190810167ffffffffffffffff811182821017156113b6576113b6611364565b60405290565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff8111828210171561140357611403611364565b604052919050565b600082601f83011261141c57600080fd5b813567ffffffffffffffff81111561143657611436611364565b61146760207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116016113bc565b81815284602083860101111561147c57600080fd5b816020850160208301376000918101602001919091529392505050565b600080600080600060a086880312156114b157600080fd5b85356114bc81611306565b945060208601356114cc81611306565b935060408601356114dc81611306565b925060608601359150608086013567ffffffffffffffff8111156114ff57600080fd5b61150b8882890161140b565b9150509295509295909350565b6000806000806080858703121561152e57600080fd5b843561153981611306565b9350602085013561154981611306565b925060408501359150606085013567ffffffffffffffff81111561156c57600080fd5b6115788782880161140b565b91505092959194509250565b6000806000806080858703121561159a57600080fd5b84356115a581611306565b93506020858101356115b681611306565b935060408681013567ffffffffffffffff808211156115d457600080fd5b818901915089601f8301126115e857600080fd5b8135818111156115fa576115fa611364565b611608858260051b016113bc565b81815260069190911b8301850190858101908c83111561162757600080fd5b938601935b828510156116705785858e0312156116445760008081fd5b61164c611393565b853561165781611306565b815285880135888201528252938501939086019061162c565b97505050606089013593508084111561168857600080fd5b5050506115788782880161140b565b600080600080600060a086880312156116af57600080fd5b85356116ba81611306565b945060208601356116ca81611306565b935060408601359250606086013567ffffffffffffffff8111156116ed57600080fd5b6116f98882890161140b565b95989497509295608001359392505050565b60005b8381101561172657818101518382015260200161170e565b83811115611735576000848401525b50505050565b6000815180845261175381602086016020860161170b565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b73ffffffffffffffffffffffffffffffffffffffff841681528260208201526060604082015260006117ba606083018461173b565b95945050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60008219821115611805576118056117c3565b500190565b828152604060208201526000611823604083018461173b565b949350505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82141561188c5761188c6117c3565b5060010190565b60408082528351828201819052600091906020906060850190828801855b828110156118ec578151805173ffffffffffffffffffffffffffffffffffffffff1685528501518585015292850192908401906001016118b1565b50505084810382860152611900818761173b565b979650505050505050565b6000825161191d81846020870161170b565b9190910192915050565b600073ffffffffffffffffffffffffffffffffffffffff8089168352876020840152808716604084015280861660608401525083608083015260c060a083015261197460c083018461173b565b98975050505050505050565b600082821015611992576119926117c3565b500390565b6000602082840312156119a957600080fd5b815180151581146119b957600080fd5b9392505050565b600073ffffffffffffffffffffffffffffffffffffffff808816835280871660208401525084604083015260a060608301526119ff60a083018561173b565b90508260808301529695505050505050565b600060208284031215611a2357600080fd5b505191905056fea26469706673582212205356001a57e7d428f1e7fd24c75a44e8ec8782c64b8ef414215d7e107779e80264736f6c63430008090033

Block Transaction Gas Used Reward
view all blocks ##produced##

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
[ Download: CSV Export  ]
[ Download: CSV Export  ]

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.