Overview
ETH Balance
ETH Value
$0.00Multichain Info
Latest 25 from a total of 128 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
Meta Route | 13271438 | 16 mins ago | IN | 0 ETH | 0.00000161 | ||||
Meta Route | 13247267 | 6 hrs ago | IN | 0.027 ETH | 0.00000168 | ||||
Meta Route | 13210400 | 17 hrs ago | IN | 0 ETH | 0.00000135 | ||||
Meta Route | 13208681 | 17 hrs ago | IN | 0.0858 ETH | 0.00000162 | ||||
Meta Route | 13190700 | 22 hrs ago | IN | 0 ETH | 0.00000165 | ||||
Meta Route | 13167246 | 29 hrs ago | IN | 0.0049 ETH | 0.00000135 | ||||
Meta Route | 13155117 | 32 hrs ago | IN | 0 ETH | 0.00000163 | ||||
Meta Route | 13142415 | 36 hrs ago | IN | 0.009 ETH | 0.00000135 | ||||
Meta Route | 13124767 | 41 hrs ago | IN | 0 ETH | 0.00000163 | ||||
Meta Route | 13084215 | 2 days ago | IN | 0 ETH | 0.00000168 | ||||
Meta Route | 12998622 | 3 days ago | IN | 0 ETH | 0.00000135 | ||||
Meta Route | 12945593 | 3 days ago | IN | 0 ETH | 0.00000161 | ||||
Meta Route | 12940101 | 3 days ago | IN | 0.0067 ETH | 0.00000163 | ||||
Meta Route | 12931398 | 3 days ago | IN | 0.0267 ETH | 0.00000173 | ||||
Meta Route | 12920287 | 4 days ago | IN | 0 ETH | 0.00000135 | ||||
Meta Route | 12907098 | 4 days ago | IN | 0.475 ETH | 0.00000135 | ||||
Meta Route | 12906958 | 4 days ago | IN | 0 ETH | 0.00000135 | ||||
Meta Route | 12805457 | 5 days ago | IN | 0.006 ETH | 0.00000135 | ||||
Meta Route | 12805237 | 5 days ago | IN | 0 ETH | 0.00000165 | ||||
Meta Route | 12664212 | 7 days ago | IN | 0.0079 ETH | 0.00000163 | ||||
Meta Route | 12651599 | 7 days ago | IN | 0 ETH | 0.00000147 | ||||
Meta Route | 12651303 | 7 days ago | IN | 0 ETH | 0.00000147 | ||||
Meta Route | 12645373 | 7 days ago | IN | 0 ETH | 0.00000135 | ||||
Meta Route | 12584374 | 7 days ago | IN | 0 ETH | 0.00000136 | ||||
Meta Route | 12443816 | 9 days ago | IN | 0.3343 ETH | 0.00000163 |
Latest 25 internal transactions (View All)
Parent Transaction Hash | Block | From | To | |||
---|---|---|---|---|---|---|
13247267 | 6 hrs ago | 0.027 ETH | ||||
13208681 | 17 hrs ago | 0.0858 ETH | ||||
13167246 | 29 hrs ago | 0.0049 ETH | ||||
13142415 | 36 hrs ago | 0.009 ETH | ||||
13076455 | 2 days ago | 0.01006982 ETH | ||||
13076455 | 2 days ago | 0.01006982 ETH | ||||
13055689 | 2 days ago | 0.00093585 ETH | ||||
13055689 | 2 days ago | 0.00093585 ETH | ||||
12986167 | 3 days ago | 0.020459 ETH | ||||
12986167 | 3 days ago | 0.020459 ETH | ||||
12980402 | 3 days ago | 0.0205588 ETH | ||||
12980402 | 3 days ago | 0.0205588 ETH | ||||
12975703 | 3 days ago | 0.0206087 ETH | ||||
12975703 | 3 days ago | 0.0206087 ETH | ||||
12940101 | 3 days ago | 0.0067 ETH | ||||
12931398 | 3 days ago | 0.0267 ETH | ||||
12907098 | 4 days ago | 0.475 ETH | ||||
12881195 | 4 days ago | 3 ETH | ||||
12881195 | 4 days ago | 3 ETH | ||||
12817958 | 5 days ago | 0.0246506 ETH | ||||
12817958 | 5 days ago | 0.0246506 ETH | ||||
12816728 | 5 days ago | 0.0265468 ETH | ||||
12816728 | 5 days ago | 0.0265468 ETH | ||||
12814924 | 5 days ago | 0.0205588 ETH | ||||
12814924 | 5 days ago | 0.0205588 ETH |
Contract Source Code (Solidity Standard Json-Input format)
// SPDX-License-Identifier: GPL-3.0 // uni -> stable -> uni scheme pragma solidity ^0.8.0; import "@openzeppelin/contracts/utils/Context.sol"; import "@openzeppelin/contracts/token/ERC20/IERC20.sol"; import "@uniswap/lib/contracts/libraries/TransferHelper.sol"; import "./MetaRouteStructs.sol"; import "./MetaRouterGateway.sol"; import "../../utils/RevertMessageParser.sol"; /** * @title MetaRouterV3 * @notice Users must give approve on their tokens to `MetaRoutetGateway` contract, * not to `MetaRouter` contract. */ contract MetaRouter is Context { MetaRouterGateway public immutable metaRouterGateway; event TransitTokenSent( address to, uint256 amount, address token ); constructor() { metaRouterGateway = new MetaRouterGateway(address(this)); } /** * @notice Method that starts the Meta Routing * @dev external + internal swap for burn scheme, only external for synth scheme * @dev calls the next method on the other side * @param _metarouteTransaction metaRoute offchain transaction data */ function metaRoute( MetaRouteStructs.MetaRouteTransaction calldata _metarouteTransaction ) external payable { uint256 approvedTokensLength = _metarouteTransaction.approvedTokens.length; if (!_metarouteTransaction.nativeIn) { metaRouterGateway.claimTokens( _metarouteTransaction.approvedTokens[0], _msgSender(), _metarouteTransaction.amount ); } uint256 secondSwapAmountIn = _metarouteTransaction.amount; if (_metarouteTransaction.firstSwapCalldata.length != 0) { if (!_metarouteTransaction.nativeIn) { _lazyApprove( _metarouteTransaction.approvedTokens[0], _metarouteTransaction.firstDexRouter, _metarouteTransaction.amount ); } require( _metarouteTransaction.firstDexRouter != address(metaRouterGateway), "MetaRouter: invalid first router" ); { uint256 size; address toCheck = _metarouteTransaction.firstDexRouter; assembly { size := extcodesize(toCheck) } require(size != 0, "MetaRouter: call for a non-contract account"); } (bool firstSwapSuccess, bytes memory swapData) = _metarouteTransaction.firstDexRouter.call{value: msg.value}( _metarouteTransaction.firstSwapCalldata ); if (!firstSwapSuccess) { revert(RevertMessageParser.getRevertMessage(swapData, "MetaRouter: first swap failed")); } secondSwapAmountIn = IERC20(_metarouteTransaction.approvedTokens[1]).balanceOf(address(this)); } uint256 finalSwapAmountIn = secondSwapAmountIn; if (_metarouteTransaction.secondSwapCalldata.length != 0) { bytes memory secondSwapCalldata = _metarouteTransaction.secondSwapCalldata; assembly { mstore(add(secondSwapCalldata, 36), secondSwapAmountIn) } _lazyApprove( _metarouteTransaction.approvedTokens[approvedTokensLength - 2], _metarouteTransaction.secondDexRouter, secondSwapAmountIn ); require( _metarouteTransaction.secondDexRouter != address(metaRouterGateway), "MetaRouter: invalid second router" ); { uint256 size; address toCheck = _metarouteTransaction.secondDexRouter; assembly { size := extcodesize(toCheck) } require(size != 0, "MetaRouter: call for a non-contract account"); } (bool secondSwapSuccess, bytes memory swapData) = _metarouteTransaction.secondDexRouter.call(secondSwapCalldata); if (!secondSwapSuccess) { revert(RevertMessageParser.getRevertMessage(swapData, "MetaRouter: second swap failed")); } finalSwapAmountIn = IERC20( _metarouteTransaction.approvedTokens[approvedTokensLength - 1] ).balanceOf(address(this)); } _lazyApprove( _metarouteTransaction.approvedTokens[approvedTokensLength - 1], _metarouteTransaction.relayRecipient, finalSwapAmountIn ); bytes memory otherSideCalldata = _metarouteTransaction.otherSideCalldata; assembly { mstore(add(otherSideCalldata, 100), finalSwapAmountIn) } require( _metarouteTransaction.relayRecipient != address(metaRouterGateway), "MetaRouter: invalid recipient" ); { uint256 size; address toCheck = _metarouteTransaction.relayRecipient; assembly { size := extcodesize(toCheck) } require(size != 0, "MetaRouter: call for a non-contract account"); } (bool otherSideCallSuccess, bytes memory data) = _metarouteTransaction.relayRecipient.call(otherSideCalldata); if (!otherSideCallSuccess) { revert(RevertMessageParser.getRevertMessage(data, "MetaRouter: other side call failed")); } } /** * @notice Implements an external call on some contract * @dev called by Portal in metaUnsynthesize() method * @param _token address of token * @param _amount amount of _token * @param _receiveSide contract on which call will take place * @param _calldata encoded method to call * @param _offset shift to patch the amount to calldata */ function externalCall( address _token, uint256 _amount, address _receiveSide, bytes calldata _calldata, uint256 _offset, address _to ) external { (bool success,) = _externalCall(_token, _amount, _receiveSide, _calldata, _offset); if (!success) { TransferHelper.safeTransfer( _token, _to, _amount ); emit TransitTokenSent(_to, _amount, _token); } } function returnSwap( address _token, uint256 _amount, address _router, bytes calldata _swapCalldata, address _burnToken, address _synthesis, bytes calldata _burnCalldata ) external { (bool success, bytes memory data) = _externalCall(_token, _amount, _router, _swapCalldata, 36); if (!success) { revert(RevertMessageParser.getRevertMessage(data, "MetaRouterV2: internal swap failed")); } uint256 internalSwapAmountOut = IERC20(_burnToken).balanceOf(address(this)); bytes memory burnCalldata = _burnCalldata; assembly { mstore(add(burnCalldata, 100), internalSwapAmountOut) } require( _synthesis != address(metaRouterGateway), "MetaRouterV2: invalid recipient" ); { uint256 size; address toCheck = _synthesis; assembly { size := extcodesize(toCheck) } require(size != 0, "MetaRouter: call for a non-contract account"); } (bool otherSideCallSuccess, bytes memory burnData) = _synthesis.call(burnCalldata); if (!otherSideCallSuccess) { revert(RevertMessageParser.getRevertMessage(burnData, "MetaRouterV2: revertSynthesizeRequest call failed")); } } /** * @notice Implements an internal swap on stable router and final method call * @dev called by Synthesis in metaMint() method * @param _metaMintTransaction metaMint offchain transaction data */ function metaMintSwap( MetaRouteStructs.MetaMintTransaction calldata _metaMintTransaction ) external { address finalCallToken = _metaMintTransaction.swapTokens[0]; if (_metaMintTransaction.secondSwapCalldata.length != 0) { // internal swap (bool internalSwapSuccess, bytes memory internalSwapData) = _externalCall( _metaMintTransaction.swapTokens[0], _metaMintTransaction.amount, _metaMintTransaction.secondDexRouter, _metaMintTransaction.secondSwapCalldata, 36 ); if (!internalSwapSuccess) { revert(RevertMessageParser.getRevertMessage(internalSwapData, "MetaRouter: internal swap failed")); } finalCallToken = _metaMintTransaction.swapTokens[1]; } if (_metaMintTransaction.finalCalldata.length != 0) { // patch crossChainID bytes32 crossChainID = _metaMintTransaction.crossChainID; bytes memory calldata_ = _metaMintTransaction.finalCalldata; assembly { mstore(add(calldata_, 132), crossChainID) } uint256 finalAmountIn = IERC20(finalCallToken).balanceOf(address(this)); // external call (bool finalSuccess, bytes memory finalData) = _externalCall( finalCallToken, finalAmountIn, _metaMintTransaction.finalReceiveSide, calldata_, _metaMintTransaction.finalOffset ); if (!finalSuccess) { revert(RevertMessageParser.getRevertMessage(finalData, "MetaRouter: final call failed")); } } uint256 amountOut = IERC20(_metaMintTransaction.swapTokens[_metaMintTransaction.swapTokens.length - 1]).balanceOf(address(this)); if (amountOut != 0) { TransferHelper.safeTransfer( _metaMintTransaction.swapTokens[_metaMintTransaction.swapTokens.length - 1], _metaMintTransaction.to, amountOut ); } } function sendTransitToken(address _token, address _to, uint256 _amount) external { TransferHelper.safeTransfer( _token, _to, _amount ); emit TransitTokenSent(_to, _amount, _token); } /** * @notice Implements call of some operation with token * @dev Internal function used in metaMintSwap() and externalCall() * @param _token token address * @param _amount amount of _token * @param _receiveSide address of contract on which method will be called * @param _calldata encoded method call * @param _offset shift to patch the _amount to calldata */ function _externalCall( address _token, uint256 _amount, address _receiveSide, bytes memory _calldata, uint256 _offset ) internal returns (bool success, bytes memory data) { require(_receiveSide != address(metaRouterGateway), "MetaRouter: invalid receiveSide"); _lazyApprove(_token, _receiveSide, _amount); if(_offset != 0) { assembly { mstore(add(_calldata, _offset), _amount) } } { uint256 size; address toCheck = _receiveSide; assembly { size := extcodesize(toCheck) } require(size != 0, "MetaRouter: call for a non-contract account"); } (success, data) = _receiveSide.call(_calldata); } /** * @notice Implements approve * @dev Internal function used to approve the token spending * @param _token token address * @param _to address to approve * @param _amount amount for which approve will be given */ function _lazyApprove(address _token, address _to, uint256 _amount) internal { if (IERC20(_token).allowance(address(this), _to) < _amount) { TransferHelper.safeApprove(_token, _to, type(uint256).max); } } }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts v4.4.1 (token/ERC20/IERC20.sol) pragma solidity ^0.8.0; /** * @dev Interface of the ERC20 standard as defined in the EIP. */ interface IERC20 { /** * @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 `recipient`. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transfer(address recipient, 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 `sender` to `recipient` 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 sender, address recipient, uint256 amount ) external returns (bool); /** * @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); }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts v4.4.1 (utils/Context.sol) pragma solidity ^0.8.0; /** * @dev Provides information about the current execution context, including the * sender of the transaction and its data. While these are generally available * via msg.sender and msg.data, they should not be accessed in such a direct * manner, since when dealing with meta-transactions the account sending and * paying for execution may not be the actual sender (as far as an application * is concerned). * * This contract is only required for intermediate, library-like contracts. */ abstract contract Context { function _msgSender() internal view virtual returns (address) { return msg.sender; } function _msgData() internal view virtual returns (bytes calldata) { return msg.data; } }
// SPDX-License-Identifier: GPL-3.0-or-later pragma solidity >=0.6.0; // helper methods for interacting with ERC20 tokens and sending ETH that do not consistently return true/false library TransferHelper { function safeApprove( address token, address to, uint256 value ) internal { // bytes4(keccak256(bytes('approve(address,uint256)'))); (bool success, bytes memory data) = token.call(abi.encodeWithSelector(0x095ea7b3, to, value)); require( success && (data.length == 0 || abi.decode(data, (bool))), 'TransferHelper::safeApprove: approve failed' ); } function safeTransfer( address token, address to, uint256 value ) internal { // bytes4(keccak256(bytes('transfer(address,uint256)'))); (bool success, bytes memory data) = token.call(abi.encodeWithSelector(0xa9059cbb, to, value)); require( success && (data.length == 0 || abi.decode(data, (bool))), 'TransferHelper::safeTransfer: transfer failed' ); } function safeTransferFrom( address token, address from, address to, uint256 value ) internal { // bytes4(keccak256(bytes('transferFrom(address,address,uint256)'))); (bool success, bytes memory data) = token.call(abi.encodeWithSelector(0x23b872dd, from, to, value)); require( success && (data.length == 0 || abi.decode(data, (bool))), 'TransferHelper::transferFrom: transferFrom failed' ); } function safeTransferETH(address to, uint256 value) internal { (bool success, ) = to.call{value: value}(new bytes(0)); require(success, 'TransferHelper::safeTransferETH: ETH transfer failed'); } }
// SPDX-License-Identifier: GPL-3.0 pragma solidity ^0.8.0; import "../types/BtcSerial.sol"; library MetaRouteStructs { struct MetaBurnTransaction { uint256 stableBridgingFee; uint256 amount; bytes32 crossChainID; address syntCaller; address finalReceiveSide; address sToken; bytes finalCallData; uint256 finalOffset; address chain2address; address receiveSide; address oppositeBridge; address revertableAddress; uint256 chainID; bytes32 clientID; } struct MetaMintTransaction { uint256 stableBridgingFee; uint256 amount; bytes32 crossChainID; bytes32 externalID; address tokenReal; uint256 chainID; address to; address[] swapTokens; address secondDexRouter; bytes secondSwapCalldata; address finalReceiveSide; bytes finalCalldata; uint256 finalOffset; } struct MetaMintTransactionBTC { uint256 stableBridgingFee; uint256 amount; BtcSerial serial; bytes32 crossChainID; bytes32 externalID; address tokenReal; uint256 chainID; address to; address receiveSide; bytes receiveSideCalldata; uint256 receiveSideOffset; } struct MetaRouteTransaction { bytes firstSwapCalldata; bytes secondSwapCalldata; address[] approvedTokens; address firstDexRouter; address secondDexRouter; uint256 amount; bool nativeIn; address relayRecipient; bytes otherSideCalldata; } struct MetaSynthesizeTransaction { uint256 stableBridgingFee; uint256 amount; address rtoken; address chain2address; address receiveSide; address oppositeBridge; address syntCaller; uint256 chainID; address[] swapTokens; address secondDexRouter; bytes secondSwapCalldata; address finalReceiveSide; bytes finalCalldata; uint256 finalOffset; address revertableAddress; bytes32 clientID; } struct MetaRevertTransaction { uint256 stableBridgingFee; bytes32 internalID; address receiveSide; address managerChainBridge; address sourceChainBridge; uint256 managerChainId; uint256 sourceChainId; address router; bytes swapCalldata; address sourceChainSynthesis; address burnToken; bytes burnCalldata; bytes32 clientID; } }
// SPDX-License-Identifier: GPL-3.0 pragma solidity ^0.8.0; import "@uniswap/lib/contracts/libraries/TransferHelper.sol"; /** * @title MetaRouterGateway * @notice During the `metaRoute` transaction `MetaRouter` (only) claims user's tokens * from `MetaRoutetGateway` contract and then operates with them. */ contract MetaRouterGateway { address public immutable metaRouter; modifier onlyMetarouter() { require(metaRouter == msg.sender, "Symb: caller is not the metarouter"); _; } constructor(address _metaRouter) { metaRouter = _metaRouter; } function claimTokens( address _token, address _from, uint256 _amount ) external onlyMetarouter { TransferHelper.safeTransferFrom(_token, _from, metaRouter, _amount); } }
// SPDX-License-Identifier: GPL-3.0 pragma solidity ^0.8.19; type BtcSerial is uint64; using {inc, equal as ==} for BtcSerial global; function inc(BtcSerial a) pure returns (BtcSerial) { return BtcSerial.wrap(BtcSerial.unwrap(a) + 1); } function equal(BtcSerial a, BtcSerial b) pure returns (bool) { return BtcSerial.unwrap(a) == BtcSerial.unwrap(b); }
// SPDX-License-Identifier: GPL-3.0 pragma solidity ^0.8.0; library RevertMessageParser { function getRevertMessage(bytes memory _data, string memory _defaultMessage) internal pure returns (string memory) { // If the _data length is less than 68, then the transaction failed silently (without a revert message) if (_data.length < 68) return _defaultMessage; assembly { // Slice the sighash _data := add(_data, 0x04) } return abi.decode(_data, (string)); } }
{ "libraries": {}, "optimizer": { "enabled": true, "runs": 2000 }, "outputSelection": { "*": { "*": [ "evm.bytecode", "evm.deployedBytecode", "devdoc", "userdoc", "metadata", "abi" ] } }, "viaIR": true }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
Contract ABI
API[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"},{"indexed":false,"internalType":"address","name":"token","type":"address"}],"name":"TransitTokenSent","type":"event"},{"inputs":[{"internalType":"address","name":"_token","type":"address"},{"internalType":"uint256","name":"_amount","type":"uint256"},{"internalType":"address","name":"_receiveSide","type":"address"},{"internalType":"bytes","name":"_calldata","type":"bytes"},{"internalType":"uint256","name":"_offset","type":"uint256"},{"internalType":"address","name":"_to","type":"address"}],"name":"externalCall","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"components":[{"internalType":"uint256","name":"stableBridgingFee","type":"uint256"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"bytes32","name":"crossChainID","type":"bytes32"},{"internalType":"bytes32","name":"externalID","type":"bytes32"},{"internalType":"address","name":"tokenReal","type":"address"},{"internalType":"uint256","name":"chainID","type":"uint256"},{"internalType":"address","name":"to","type":"address"},{"internalType":"address[]","name":"swapTokens","type":"address[]"},{"internalType":"address","name":"secondDexRouter","type":"address"},{"internalType":"bytes","name":"secondSwapCalldata","type":"bytes"},{"internalType":"address","name":"finalReceiveSide","type":"address"},{"internalType":"bytes","name":"finalCalldata","type":"bytes"},{"internalType":"uint256","name":"finalOffset","type":"uint256"}],"internalType":"struct MetaRouteStructs.MetaMintTransaction","name":"_metaMintTransaction","type":"tuple"}],"name":"metaMintSwap","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"components":[{"internalType":"bytes","name":"firstSwapCalldata","type":"bytes"},{"internalType":"bytes","name":"secondSwapCalldata","type":"bytes"},{"internalType":"address[]","name":"approvedTokens","type":"address[]"},{"internalType":"address","name":"firstDexRouter","type":"address"},{"internalType":"address","name":"secondDexRouter","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"bool","name":"nativeIn","type":"bool"},{"internalType":"address","name":"relayRecipient","type":"address"},{"internalType":"bytes","name":"otherSideCalldata","type":"bytes"}],"internalType":"struct MetaRouteStructs.MetaRouteTransaction","name":"_metarouteTransaction","type":"tuple"}],"name":"metaRoute","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"metaRouterGateway","outputs":[{"internalType":"contract MetaRouterGateway","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_token","type":"address"},{"internalType":"uint256","name":"_amount","type":"uint256"},{"internalType":"address","name":"_router","type":"address"},{"internalType":"bytes","name":"_swapCalldata","type":"bytes"},{"internalType":"address","name":"_burnToken","type":"address"},{"internalType":"address","name":"_synthesis","type":"address"},{"internalType":"bytes","name":"_burnCalldata","type":"bytes"}],"name":"returnSwap","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_token","type":"address"},{"internalType":"address","name":"_to","type":"address"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"sendTransitToken","outputs":[],"stateMutability":"nonpayable","type":"function"}]
Contract Creation Code
60a080604052346100aa57610414818101906001600160401b0382118383101761009457602091839161170983393081520301906000f080156100885760805260405161165990816100b08239608051818181610511015281816106a30152818161076b015281816108a7015281816109b801528181610aa10152818161130d01526113bd0152f35b6040513d6000823e3d90fd5b634e487b7160e01b600052604160045260246000fd5b600080fdfe608060405260048036101561001357600080fd5b6000803560e01c9182633bc788351461007c575050806362770ff814610077578063732cffe914610072578063a11b11981461006d578063c394a5da146100685763f5b697a51461006357600080fd5b610ac5565b610a81565b6105a6565b610414565b61035a565b34610340576020600319818136011261033c5782359067ffffffffffffffff8211610338576101a08285019183360301126103385760e4820193836100d26100cd6100c78886610b71565b90610bbe565b610bfc565b61012485016100e18186610c9c565b90506102ca575b5061016485016100f88186610c9c565b90506101f3575b5050610165916101446101386101386100cd8a61012b610132610122838c610b71565b9290938c610b71565b9050610eb3565b91610bec565b6001600160a01b031690565b6040516370a0823160e01b8152309281019283529384928391829160200190565b03915afa9384156101ee5786946101bf575b505082610182578480f35b60c46101aa6100cd838761013261012b6101a26101b79b6101b199610b71565b939094610b71565b9201610bfc565b9061106e565b818080808480f35b6101df929450803d106101e7575b6101d78183610c6d565b810190610e6d565b918580610177565b503d6101cd565b610c90565b61020a9192506102039085610c9c565b3691610e7c565b604485013560848201526040516370a0823160e01b8152308482019081529092919087908490819060200103816001600160a01b0386165afa80156101ee5761026f938a916102ad575b506102626101448801610bfc565b90610184880135936113af565b901561027d578085916100ff565b61028f906102896112c5565b906115a1565b906102a960405192839262461bcd60e51b84528301610e41565b0390fd5b6102c49150883d8a116101e7576101d78183610c6d565b8a610254565b905061030891506102e16100cd6100c78987610b71565b906102fc6102036102f56101048901610bfc565b9287610c9c565b916024870135906112fe565b901561032c5750836103266100cd6103208886610b71565b90610bdd565b886100e8565b61028f9061028961128c565b8480fd5b8380fd5b5080fd5b6001600160a01b0381160361035557565b600080fd5b34610355576060600319360112610355577f0ac368c799fd87078497a837c3b184349108599d7c108f68710d3321ba416c6f60043561039881610344565b6024356103a481610344565b6103e1604435926103b684848361106e565b604051938493849193929060409160608401956001600160a01b038093168552602085015216910152565b0390a1005b9181601f840112156103555782359167ffffffffffffffff8311610355576020838186019501011161035557565b346103555760e0600319360112610355576004803561043281610344565b6044359061043f82610344565b67ffffffffffffffff916064358381116103555761046090369086016103e6565b9190936084359361047085610344565b60a4359261047d84610344565b60c435928311610355576104a461049a6104ae9436908b016103e6565b9890963691610e7c565b91602435906112fe565b901561059957506040516370a0823160e01b81523086820190815290939060209085908190830103816001600160a01b038095165afa9283156101ee576000958695869561056d575b5061053b9291610508913691610e7c565b936064850152807f00000000000000000000000000000000000000000000000000000000000000001690831614156111e2565b610547813b1515610d1a565b82602083519301915af1610559610db5565b901561056157005b61028f9061028961122d565b6105089195509161058f61053b949360203d81116101e7576101d78183610c6d565b95915091926104f7565b61028f8691610289611183565b60206003199080823601126103555760049182359167ffffffffffffffff8311610355576101208385019284360301126103555760448301916105e98382610b71565b905060c48501936106006105fc86610bb1565b1590565b6109ae575b60a4860135946106158480610c9c565b9050610871575b50846024870161062c8186610c9c565b9050610704575b5050600095610686610203856101046106666100cd8c9b9a999861013261065e6106e09a8f9c610b71565b919092610eb3565b9461067f8a60e483019761067989610bfc565b90611412565b0190610c9c565b9460648601526106cc61069882610bfc565b6001600160a01b03807f00000000000000000000000000000000000000000000000000000000000000001691161415610faf565b6100cd6106d882610bfc565b3b1515610d1a565b9183519301915af16106f0610db5565b90156106f857005b61028f90610289610ffa565b849396509061079461071f6102036000959897948695610c9c565b918060248401526107546107456100cd8b61013261073d8d8c610b71565b919092610ed8565b9160848c019261067984610bfc565b6106cc61076082610bfc565b6001600160a01b03807f00000000000000000000000000000000000000000000000000000000000000001691161415610f05565b828683519301915af16107a5610db5565b901561086457506107cb6101386101386100cd6107c28786610b71565b6101328a610eb3565b938260405180966370a0823160e01b825281806107fa308d83019190916001600160a01b036020820193169052565b03915afa9586156101ee57610686610203600098946101046106666100cd6106e09761013261065e8f9e9b8f9c8e8e92610847575b50509e50505098505050509596935050819750610633565b61085d9250803d106101e7576101d78183610c6d565b388e61082f565b61028f8791610289610f76565b6105fc61088091969296610bb1565b610988575b506000806108d0606488016106cc61089c82610bfc565b6001600160a01b03807f00000000000000000000000000000000000000000000000000000000000000001691161415610ccf565b6108da8580610c9c565b906108ea60405180938193610d8b565b039134905af16108f8610db5565b901561097b57506109156101386101386100cd6103208887610b71565b8360405180926370a0823160e01b82528180610943308d83019190916001600160a01b036020820193169052565b03915afa9081156101ee5760009161095e575b50933861061c565b6109759150843d86116101e7576101d78183610c6d565b38610956565b61028f8791610289610de5565b6109a89061099c6100cd6100c78887610b71565b61067960648901610bfc565b38610885565b6001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000166109e86100cd6100c78487610b71565b90803b1561035557604080517f9fc314c80000000000000000000000000000000000000000000000000000000081526001600160a01b03909316838b0190815233602082015260a48a013591810191909152600091839182908490829060600103925af180156101ee57610a5d575b50610605565b80610a6a610a7092610c1c565b80610a76565b38610a57565b600091031261035557565b346103555760006003193601126103555760206040516001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000168152f35b346103555760c060031936011261035557600435610ae281610344565b602435604435610af181610344565b60643567ffffffffffffffff811161035557610b14610b399136906004016103e6565b9092610b3160a43594610b2686610344565b608435933691610e7c565b9085876113af565b5015610b4157005b6103e1836103b684847f0ac368c799fd87078497a837c3b184349108599d7c108f68710d3321ba416c6f9761106e565b903590601e1981360301821215610355570180359067ffffffffffffffff821161035557602001918160051b3603831361035557565b8015150361035557565b35610bbb81610ba7565b90565b9015610bc75790565b634e487b7160e01b600052603260045260246000fd5b9060011015610bc75760200190565b9190811015610bc75760051b0190565b35610bbb81610344565b634e487b7160e01b600052604160045260246000fd5b67ffffffffffffffff8111610c3057604052565b610c06565b6040810190811067ffffffffffffffff821117610c3057604052565b6060810190811067ffffffffffffffff821117610c3057604052565b90601f601f19910116810190811067ffffffffffffffff821117610c3057604052565b6040513d6000823e3d90fd5b903590601e1981360301821215610355570180359067ffffffffffffffff82116103555760200191813603831361035557565b15610cd657565b606460405162461bcd60e51b815260206004820152602060248201527f4d657461526f757465723a20696e76616c696420666972737420726f757465726044820152fd5b15610d2157565b608460405162461bcd60e51b815260206004820152602b60248201527f4d657461526f757465723a2063616c6c20666f722061206e6f6e2d636f6e747260448201527f616374206163636f756e740000000000000000000000000000000000000000006064820152fd5b908092918237016000815290565b67ffffffffffffffff8111610c3057601f01601f191660200190565b3d15610de0573d90610dc682610d99565b91610dd46040519384610c6d565b82523d6000602084013e565b606090565b60405190610df282610c35565b601d82527f4d657461526f757465723a2066697273742073776170206661696c65640000006020830152565b60005b838110610e315750506000910152565b8181015183820152602001610e21565b601f19601f60409360208452610e668151809281602088015260208888019101610e1e565b0116010190565b90816020910312610355575190565b929192610e8882610d99565b91610e966040519384610c6d565b829481845281830111610355578281602093846000960137010152565b906000198201918211610ec257565b634e487b7160e01b600052601160045260246000fd5b907ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe8201918211610ec257565b15610f0c57565b608460405162461bcd60e51b815260206004820152602160248201527f4d657461526f757465723a20696e76616c6964207365636f6e6420726f75746560448201527f72000000000000000000000000000000000000000000000000000000000000006064820152fd5b60405190610f8382610c35565b601e82527f4d657461526f757465723a207365636f6e642073776170206661696c656400006020830152565b15610fb657565b606460405162461bcd60e51b815260206004820152601d60248201527f4d657461526f757465723a20696e76616c696420726563697069656e740000006044820152fd5b6040519061100782610c51565b602282527f65640000000000000000000000000000000000000000000000000000000000006040837f4d657461526f757465723a206f7468657220736964652063616c6c206661696c60208201520152565b908160209103126103555751610bbb81610ba7565b6040517fa9059cbb00000000000000000000000000000000000000000000000000000000602082019081526001600160a01b039093166024820152604481019390935260009283929083906110d081606481015b03601f198101835282610c6d565b51925af16110dc610db5565b81611154575b50156110ea57565b608460405162461bcd60e51b815260206004820152602d60248201527f5472616e7366657248656c7065723a3a736166655472616e736665723a20747260448201527f616e73666572206661696c6564000000000000000000000000000000000000006064820152fd5b8051801592508215611169575b5050386110e2565b61117c9250602080918301019101611059565b3880611161565b6040519061119082610c51565b602282527f65640000000000000000000000000000000000000000000000000000000000006040837f4d657461526f7574657256323a20696e7465726e616c2073776170206661696c60208201520152565b156111e957565b606460405162461bcd60e51b815260206004820152601f60248201527f4d657461526f7574657256323a20696e76616c696420726563697069656e74006044820152fd5b6040519061123a82610c51565b603182527f71756573742063616c6c206661696c65640000000000000000000000000000006040837f4d657461526f7574657256323a2072657665727453796e74686573697a65526560208201520152565b6040519061129982610c35565b602082527f4d657461526f757465723a20696e7465726e616c2073776170206661696c65646020830152565b604051906112d282610c35565b601d82527f4d657461526f757465723a2066696e616c2063616c6c206661696c65640000006020830152565b919290926001600160a01b03807f0000000000000000000000000000000000000000000000000000000000000000169082161461136b5783611344600095838796611412565b6024830152611355813b1515610d1a565b82602083519301915af1611367610db5565b9091565b606460405162461bcd60e51b815260206004820152601f60248201527f4d657461526f757465723a20696e76616c6964207265636569766553696465006044820152fd5b9291906001600160a01b03807f0000000000000000000000000000000000000000000000000000000000000000169083161461136b576000946113f482848897611412565b80611408575b5050611355813b1515610d1a565b83015238806113fa565b90604051927fdd62ed3e000000000000000000000000000000000000000000000000000000008452306004850152836001600160a01b038084166024830152816044602097889388165afa9081156101ee57600091611584575b501061147757505050565b6000918291826040516114cf816110c2898201957f095ea7b3000000000000000000000000000000000000000000000000000000008752602483016020600019919392936001600160a01b0360408201951681520152565b51925af16114db610db5565b81611554575b50156114ea5750565b6084906040519062461bcd60e51b82526004820152602b60248201527f5472616e7366657248656c7065723a3a73616665417070726f76653a2061707060448201527f726f7665206661696c65640000000000000000000000000000000000000000006064820152fd5b8051801592508390831561156c575b505050386114e1565b61157c9350820181019101611059565b388281611563565b61159b9150853d87116101e7576101d78183610c6d565b3861146c565b90604482511061161e57506004810151810190602081602484019303126103555760248101519067ffffffffffffffff82116103555701816043820112156103555760248101516115f181610d99565b926115ff6040519485610c6d565b8184526044828401011161035557610bbb916044602085019101610e1e565b90509056fea26469706673582212208ae2e7ee29ac155a6f194db475f55ef17ac8bb432ff52dcf00bd286524e2ab8564736f6c6343000813003360a03461006f57601f61041438819003918201601f19168301916001600160401b038311848410176100745780849260209460405283398101031261006f57516001600160a01b038116810361006f57608052604051610389908161008b82396080518181816066015260d50152f35b600080fd5b634e487b7160e01b600052604160045260246000fdfe608060408181526004918236101561001657600080fd5b600092833560e01c9182639fc314c81461008e57505063dbec15bb1461003b57600080fd5b3461008a578160031936011261008a576020905173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000168152f35b5080fd5b9150913461034f57606060031936011261034f5773ffffffffffffffffffffffffffffffffffffffff918335838116810361034b57602493843590808216809203610347577f000000000000000000000000000000000000000000000000000000000000000016923384036102c7575083519260208401917f23b872dd00000000000000000000000000000000000000000000000000000000835286850152604484015260443560648401526064835260a083019267ffffffffffffffff93818110858211176102b557855251879283929083905af1903d156102ad573d81811161029b578351917fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0603f81601f85011601168301908382109082111761028957845281523d86602083013e5b8161024d575b50156101cb578380f35b60849291602060319251937f08c379a00000000000000000000000000000000000000000000000000000000085528401528201527f5472616e7366657248656c7065723a3a7472616e7366657246726f6d3a20747260448201527f616e7366657246726f6d206661696c65640000000000000000000000000000006064820152fd5b8051801592508215610262575b5050386101c1565b81925090602091810103126102855760200151801515810361028557388061025a565b8480fd5b8588604189634e487b7160e01b835252fd5b8487604188634e487b7160e01b835252fd5b5060606101bb565b868960418a634e487b7160e01b835252fd5b8060228760208a7f08c379a000000000000000000000000000000000000000000000000000000000608496528401528201527f53796d623a2063616c6c6572206973206e6f7420746865206d657461726f757460448201527f65720000000000000000000000000000000000000000000000000000000000006064820152fd5b8780fd5b8580fd5b8380fdfea26469706673582212209687b8b71f09666b6e9bfc783feec19346340094ca8cf0d17818f12086e4de7e64736f6c63430008130033
Deployed Bytecode
0x608060405260048036101561001357600080fd5b6000803560e01c9182633bc788351461007c575050806362770ff814610077578063732cffe914610072578063a11b11981461006d578063c394a5da146100685763f5b697a51461006357600080fd5b610ac5565b610a81565b6105a6565b610414565b61035a565b34610340576020600319818136011261033c5782359067ffffffffffffffff8211610338576101a08285019183360301126103385760e4820193836100d26100cd6100c78886610b71565b90610bbe565b610bfc565b61012485016100e18186610c9c565b90506102ca575b5061016485016100f88186610c9c565b90506101f3575b5050610165916101446101386101386100cd8a61012b610132610122838c610b71565b9290938c610b71565b9050610eb3565b91610bec565b6001600160a01b031690565b6040516370a0823160e01b8152309281019283529384928391829160200190565b03915afa9384156101ee5786946101bf575b505082610182578480f35b60c46101aa6100cd838761013261012b6101a26101b79b6101b199610b71565b939094610b71565b9201610bfc565b9061106e565b818080808480f35b6101df929450803d106101e7575b6101d78183610c6d565b810190610e6d565b918580610177565b503d6101cd565b610c90565b61020a9192506102039085610c9c565b3691610e7c565b604485013560848201526040516370a0823160e01b8152308482019081529092919087908490819060200103816001600160a01b0386165afa80156101ee5761026f938a916102ad575b506102626101448801610bfc565b90610184880135936113af565b901561027d578085916100ff565b61028f906102896112c5565b906115a1565b906102a960405192839262461bcd60e51b84528301610e41565b0390fd5b6102c49150883d8a116101e7576101d78183610c6d565b8a610254565b905061030891506102e16100cd6100c78987610b71565b906102fc6102036102f56101048901610bfc565b9287610c9c565b916024870135906112fe565b901561032c5750836103266100cd6103208886610b71565b90610bdd565b886100e8565b61028f9061028961128c565b8480fd5b8380fd5b5080fd5b6001600160a01b0381160361035557565b600080fd5b34610355576060600319360112610355577f0ac368c799fd87078497a837c3b184349108599d7c108f68710d3321ba416c6f60043561039881610344565b6024356103a481610344565b6103e1604435926103b684848361106e565b604051938493849193929060409160608401956001600160a01b038093168552602085015216910152565b0390a1005b9181601f840112156103555782359167ffffffffffffffff8311610355576020838186019501011161035557565b346103555760e0600319360112610355576004803561043281610344565b6044359061043f82610344565b67ffffffffffffffff916064358381116103555761046090369086016103e6565b9190936084359361047085610344565b60a4359261047d84610344565b60c435928311610355576104a461049a6104ae9436908b016103e6565b9890963691610e7c565b91602435906112fe565b901561059957506040516370a0823160e01b81523086820190815290939060209085908190830103816001600160a01b038095165afa9283156101ee576000958695869561056d575b5061053b9291610508913691610e7c565b936064850152807f000000000000000000000000adb2d3b711bb8d8ea92ff70292c466140432c2781690831614156111e2565b610547813b1515610d1a565b82602083519301915af1610559610db5565b901561056157005b61028f9061028961122d565b6105089195509161058f61053b949360203d81116101e7576101d78183610c6d565b95915091926104f7565b61028f8691610289611183565b60206003199080823601126103555760049182359167ffffffffffffffff8311610355576101208385019284360301126103555760448301916105e98382610b71565b905060c48501936106006105fc86610bb1565b1590565b6109ae575b60a4860135946106158480610c9c565b9050610871575b50846024870161062c8186610c9c565b9050610704575b5050600095610686610203856101046106666100cd8c9b9a999861013261065e6106e09a8f9c610b71565b919092610eb3565b9461067f8a60e483019761067989610bfc565b90611412565b0190610c9c565b9460648601526106cc61069882610bfc565b6001600160a01b03807f000000000000000000000000adb2d3b711bb8d8ea92ff70292c466140432c2781691161415610faf565b6100cd6106d882610bfc565b3b1515610d1a565b9183519301915af16106f0610db5565b90156106f857005b61028f90610289610ffa565b849396509061079461071f6102036000959897948695610c9c565b918060248401526107546107456100cd8b61013261073d8d8c610b71565b919092610ed8565b9160848c019261067984610bfc565b6106cc61076082610bfc565b6001600160a01b03807f000000000000000000000000adb2d3b711bb8d8ea92ff70292c466140432c2781691161415610f05565b828683519301915af16107a5610db5565b901561086457506107cb6101386101386100cd6107c28786610b71565b6101328a610eb3565b938260405180966370a0823160e01b825281806107fa308d83019190916001600160a01b036020820193169052565b03915afa9586156101ee57610686610203600098946101046106666100cd6106e09761013261065e8f9e9b8f9c8e8e92610847575b50509e50505098505050509596935050819750610633565b61085d9250803d106101e7576101d78183610c6d565b388e61082f565b61028f8791610289610f76565b6105fc61088091969296610bb1565b610988575b506000806108d0606488016106cc61089c82610bfc565b6001600160a01b03807f000000000000000000000000adb2d3b711bb8d8ea92ff70292c466140432c2781691161415610ccf565b6108da8580610c9c565b906108ea60405180938193610d8b565b039134905af16108f8610db5565b901561097b57506109156101386101386100cd6103208887610b71565b8360405180926370a0823160e01b82528180610943308d83019190916001600160a01b036020820193169052565b03915afa9081156101ee5760009161095e575b50933861061c565b6109759150843d86116101e7576101d78183610c6d565b38610956565b61028f8791610289610de5565b6109a89061099c6100cd6100c78887610b71565b61067960648901610bfc565b38610885565b6001600160a01b037f000000000000000000000000adb2d3b711bb8d8ea92ff70292c466140432c278166109e86100cd6100c78487610b71565b90803b1561035557604080517f9fc314c80000000000000000000000000000000000000000000000000000000081526001600160a01b03909316838b0190815233602082015260a48a013591810191909152600091839182908490829060600103925af180156101ee57610a5d575b50610605565b80610a6a610a7092610c1c565b80610a76565b38610a57565b600091031261035557565b346103555760006003193601126103555760206040516001600160a01b037f000000000000000000000000adb2d3b711bb8d8ea92ff70292c466140432c278168152f35b346103555760c060031936011261035557600435610ae281610344565b602435604435610af181610344565b60643567ffffffffffffffff811161035557610b14610b399136906004016103e6565b9092610b3160a43594610b2686610344565b608435933691610e7c565b9085876113af565b5015610b4157005b6103e1836103b684847f0ac368c799fd87078497a837c3b184349108599d7c108f68710d3321ba416c6f9761106e565b903590601e1981360301821215610355570180359067ffffffffffffffff821161035557602001918160051b3603831361035557565b8015150361035557565b35610bbb81610ba7565b90565b9015610bc75790565b634e487b7160e01b600052603260045260246000fd5b9060011015610bc75760200190565b9190811015610bc75760051b0190565b35610bbb81610344565b634e487b7160e01b600052604160045260246000fd5b67ffffffffffffffff8111610c3057604052565b610c06565b6040810190811067ffffffffffffffff821117610c3057604052565b6060810190811067ffffffffffffffff821117610c3057604052565b90601f601f19910116810190811067ffffffffffffffff821117610c3057604052565b6040513d6000823e3d90fd5b903590601e1981360301821215610355570180359067ffffffffffffffff82116103555760200191813603831361035557565b15610cd657565b606460405162461bcd60e51b815260206004820152602060248201527f4d657461526f757465723a20696e76616c696420666972737420726f757465726044820152fd5b15610d2157565b608460405162461bcd60e51b815260206004820152602b60248201527f4d657461526f757465723a2063616c6c20666f722061206e6f6e2d636f6e747260448201527f616374206163636f756e740000000000000000000000000000000000000000006064820152fd5b908092918237016000815290565b67ffffffffffffffff8111610c3057601f01601f191660200190565b3d15610de0573d90610dc682610d99565b91610dd46040519384610c6d565b82523d6000602084013e565b606090565b60405190610df282610c35565b601d82527f4d657461526f757465723a2066697273742073776170206661696c65640000006020830152565b60005b838110610e315750506000910152565b8181015183820152602001610e21565b601f19601f60409360208452610e668151809281602088015260208888019101610e1e565b0116010190565b90816020910312610355575190565b929192610e8882610d99565b91610e966040519384610c6d565b829481845281830111610355578281602093846000960137010152565b906000198201918211610ec257565b634e487b7160e01b600052601160045260246000fd5b907ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe8201918211610ec257565b15610f0c57565b608460405162461bcd60e51b815260206004820152602160248201527f4d657461526f757465723a20696e76616c6964207365636f6e6420726f75746560448201527f72000000000000000000000000000000000000000000000000000000000000006064820152fd5b60405190610f8382610c35565b601e82527f4d657461526f757465723a207365636f6e642073776170206661696c656400006020830152565b15610fb657565b606460405162461bcd60e51b815260206004820152601d60248201527f4d657461526f757465723a20696e76616c696420726563697069656e740000006044820152fd5b6040519061100782610c51565b602282527f65640000000000000000000000000000000000000000000000000000000000006040837f4d657461526f757465723a206f7468657220736964652063616c6c206661696c60208201520152565b908160209103126103555751610bbb81610ba7565b6040517fa9059cbb00000000000000000000000000000000000000000000000000000000602082019081526001600160a01b039093166024820152604481019390935260009283929083906110d081606481015b03601f198101835282610c6d565b51925af16110dc610db5565b81611154575b50156110ea57565b608460405162461bcd60e51b815260206004820152602d60248201527f5472616e7366657248656c7065723a3a736166655472616e736665723a20747260448201527f616e73666572206661696c6564000000000000000000000000000000000000006064820152fd5b8051801592508215611169575b5050386110e2565b61117c9250602080918301019101611059565b3880611161565b6040519061119082610c51565b602282527f65640000000000000000000000000000000000000000000000000000000000006040837f4d657461526f7574657256323a20696e7465726e616c2073776170206661696c60208201520152565b156111e957565b606460405162461bcd60e51b815260206004820152601f60248201527f4d657461526f7574657256323a20696e76616c696420726563697069656e74006044820152fd5b6040519061123a82610c51565b603182527f71756573742063616c6c206661696c65640000000000000000000000000000006040837f4d657461526f7574657256323a2072657665727453796e74686573697a65526560208201520152565b6040519061129982610c35565b602082527f4d657461526f757465723a20696e7465726e616c2073776170206661696c65646020830152565b604051906112d282610c35565b601d82527f4d657461526f757465723a2066696e616c2063616c6c206661696c65640000006020830152565b919290926001600160a01b03807f000000000000000000000000adb2d3b711bb8d8ea92ff70292c466140432c278169082161461136b5783611344600095838796611412565b6024830152611355813b1515610d1a565b82602083519301915af1611367610db5565b9091565b606460405162461bcd60e51b815260206004820152601f60248201527f4d657461526f757465723a20696e76616c6964207265636569766553696465006044820152fd5b9291906001600160a01b03807f000000000000000000000000adb2d3b711bb8d8ea92ff70292c466140432c278169083161461136b576000946113f482848897611412565b80611408575b5050611355813b1515610d1a565b83015238806113fa565b90604051927fdd62ed3e000000000000000000000000000000000000000000000000000000008452306004850152836001600160a01b038084166024830152816044602097889388165afa9081156101ee57600091611584575b501061147757505050565b6000918291826040516114cf816110c2898201957f095ea7b3000000000000000000000000000000000000000000000000000000008752602483016020600019919392936001600160a01b0360408201951681520152565b51925af16114db610db5565b81611554575b50156114ea5750565b6084906040519062461bcd60e51b82526004820152602b60248201527f5472616e7366657248656c7065723a3a73616665417070726f76653a2061707060448201527f726f7665206661696c65640000000000000000000000000000000000000000006064820152fd5b8051801592508390831561156c575b505050386114e1565b61157c9350820181019101611059565b388281611563565b61159b9150853d87116101e7576101d78183610c6d565b3861146c565b90604482511061161e57506004810151810190602081602484019303126103555760248101519067ffffffffffffffff82116103555701816043820112156103555760248101516115f181610d99565b926115ff6040519485610c6d565b8184526044828401011161035557610bbb916044602085019101610e1e565b90509056fea26469706673582212208ae2e7ee29ac155a6f194db475f55ef17ac8bb432ff52dcf00bd286524e2ab8564736f6c63430008130033

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.