Source Code
Latest 25 from a total of 1,205 transactions
| Transaction Hash |
|
Block
|
From
|
To
|
|||||
|---|---|---|---|---|---|---|---|---|---|
| Meta Route | 31150997 | 43 hrs ago | IN | 0 FRAX | 0.00006559 | ||||
| Meta Route | 29649821 | 36 days ago | IN | 0 FRAX | 0.00001667 | ||||
| Meta Route | 29580873 | 38 days ago | IN | 0 FRAX | 0.0000241 | ||||
| Meta Route | 29580872 | 38 days ago | IN | 0 FRAX | 0.00002403 | ||||
| Meta Route | 29439097 | 41 days ago | IN | 0 FRAX | 0.00003241 | ||||
| Meta Route | 29403175 | 42 days ago | IN | 0 FRAX | 0.00002084 | ||||
| Meta Route | 29374077 | 42 days ago | IN | 0 FRAX | 0.00005462 | ||||
| Meta Route | 29144894 | 48 days ago | IN | 0 FRAX | 0.00008833 | ||||
| Meta Route | 28241084 | 69 days ago | IN | 0 FRAX | 0.00011907 | ||||
| Meta Route | 28095415 | 72 days ago | IN | 0 FRAX | 0.00005522 | ||||
| Meta Route | 28008800 | 74 days ago | IN | 0 FRAX | 0.00012738 | ||||
| Meta Route | 27995165 | 74 days ago | IN | 0 FRAX | 0.00012098 | ||||
| Meta Route | 27979894 | 75 days ago | IN | 0 FRAX | 0.00018654 | ||||
| Meta Route | 27933712 | 76 days ago | IN | 0 FRAX | 0.00005898 | ||||
| Meta Route | 27928854 | 76 days ago | IN | 0 FRAX | 0.00005169 | ||||
| Meta Route | 27888727 | 77 days ago | IN | 0 FRAX | 0.0002422 | ||||
| Meta Route | 27808780 | 79 days ago | IN | 0 FRAX | 0.00057542 | ||||
| Meta Route | 27789444 | 79 days ago | IN | 0 FRAX | 0.00021418 | ||||
| Meta Route | 27752502 | 80 days ago | IN | 0 FRAX | 0.00028591 | ||||
| Meta Route | 27717094 | 81 days ago | IN | 0 FRAX | 0.00158082 | ||||
| Meta Route | 27674081 | 82 days ago | IN | 0 FRAX | 0.0017606 | ||||
| Meta Route | 27504768 | 86 days ago | IN | 0 FRAX | 0.00022195 | ||||
| Meta Route | 27470560 | 87 days ago | IN | 0 FRAX | 0.00014721 | ||||
| Meta Route | 27377006 | 89 days ago | IN | 0 FRAX | 0.00011274 | ||||
| Meta Route | 27358016 | 89 days ago | IN | 0 FRAX | 0.00008888 |
Latest 25 internal transactions (View All)
Advanced mode:
| Parent Transaction Hash | Block | From | To | |||
|---|---|---|---|---|---|---|
| 21042989 | 235 days ago | 412 FRAX | ||||
| 21042936 | 235 days ago | 1,000 FRAX | ||||
| 20557959 | 247 days ago | 2 FRAX | ||||
| 20182934 | 255 days ago | 347 FRAX | ||||
| 19566578 | 269 days ago | 0.1658 FRAX | ||||
| 19566538 | 269 days ago | 0.1 FRAX | ||||
| 19566498 | 269 days ago | 0.1 FRAX | ||||
| 19566438 | 269 days ago | 0.1 FRAX | ||||
| 19566406 | 269 days ago | 0.1 FRAX | ||||
| 19566355 | 269 days ago | 0.1 FRAX | ||||
| 19549045 | 270 days ago | 0.00670364 FRAX | ||||
| 19549045 | 270 days ago | 0.00670364 FRAX | ||||
| 19523910 | 270 days ago | 0.0016 FRAX | ||||
| 19523910 | 270 days ago | 0.0016 FRAX | ||||
| 19513558 | 271 days ago | 0.0007 FRAX | ||||
| 19510030 | 271 days ago | 0.00037133 FRAX | ||||
| 19510030 | 271 days ago | 0.00037133 FRAX | ||||
| 19506265 | 271 days ago | 0.00372664 FRAX | ||||
| 19506265 | 271 days ago | 0.00372664 FRAX | ||||
| 19506244 | 271 days ago | 0.0188 FRAX | ||||
| 19506244 | 271 days ago | 0.0188 FRAX | ||||
| 19489175 | 271 days ago | 0.012 FRAX | ||||
| 19479270 | 272 days ago | 0.01143475 FRAX | ||||
| 19479270 | 272 days ago | 0.01143475 FRAX | ||||
| 19477732 | 272 days ago | 0.0024 FRAX |
Cross-Chain Transactions
Loading...
Loading
Contract Name:
MetaRouter
Compiler Version
v0.8.19+commit.7dd6d404
Optimization Enabled:
Yes with 2000 runs
Other Settings:
default evmVersion
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
);
}
}
/**
* @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);
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 "@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.0;
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 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;
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));
}
}{
"optimizer": {
"enabled": true,
"runs": 2000
},
"outputSelection": {
"*": {
"*": [
"evm.bytecode",
"evm.deployedBytecode",
"devdoc",
"userdoc",
"metadata",
"abi"
]
}
},
"libraries": {}
}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"}]Contract Creation Code
60a060405234801561001057600080fd5b503060405161001e9061005c565b6001600160a01b039091168152602001604051809103906000f08015801561004a573d6000803e3d6000fd5b506001600160a01b0316608052610069565b6104c480611d4c83390190565b608051611c9f6100ad6000396000818160c601528181610647015281816107ed0152818161094d01528181610c7501528181610faf015261120d0152611c9f6000f3fe60806040526004361061005a5760003560e01c8063a11b119811610043578063a11b1198146100a1578063c394a5da146100b4578063f5b697a51461010457600080fd5b80633bc788351461005f578063732cffe914610081575b600080fd5b34801561006b57600080fd5b5061007f61007a36600461173a565b610124565b005b34801561008d57600080fd5b5061007f61009c3660046117e2565b61051c565b61007f6100af3660046118a3565b6107bc565b3480156100c057600080fd5b506100e87f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b03909116815260200160405180910390f35b34801561011057600080fd5b5061007f61011f3660046118df565b611159565b600061013360e0830183611967565b6000818110610144576101446119b1565b905060200201602081019061015991906119c7565b90506101696101208301836119e2565b1590506102ad5760008061020b61018360e0860186611967565b6000818110610194576101946119b1565b90506020020160208101906101a991906119c7565b60208601356101c0610120880161010089016119c7565b6101ce6101208901896119e2565b8080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525060249250611207915050565b915091508161027557610253816040518060400160405280602081526020017f4d657461526f757465723a20696e7465726e616c2073776170206661696c6564815250611370565b60405162461bcd60e51b815260040161026c9190611a4d565b60405180910390fd5b61028260e0850185611967565b6001818110610293576102936119b1565b90506020020160208101906102a891906119c7565b925050505b6102bb6101608301836119e2565b1590506103f457604082013560006102d76101608501856119e2565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920182905250608485018790526040516370a0823160e01b8152306004820152949550936001600160a01b03881693506370a0823192506024019050602060405180830381865afa15801561035a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061037e9190611a80565b90506000806103a6868461039a6101608b016101408c016119c7565b878b6101800135611207565b91509150816103ee57610253816040518060400160405280601d81526020017f4d657461526f757465723a2066696e616c2063616c6c206661696c6564000000815250611370565b50505050505b600061040360e0840184611967565b600161041260e0870187611967565b61041d929150611a99565b81811061042c5761042c6119b1565b905060200201602081019061044191906119c7565b6040516370a0823160e01b81523060048201526001600160a01b0391909116906370a0823190602401602060405180830381865afa158015610487573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104ab9190611a80565b90508015610517576105176104c360e0850185611967565b60016104d260e0880188611967565b6104dd929150611a99565b8181106104ec576104ec6119b1565b905060200201602081019061050191906119c7565b61051160e0860160c087016119c7565b836113a6565b505050565b6000806105648b8b8b8b8b8080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525060249250611207915050565b915091508161058f5761025381604051806060016040528060228152602001611c2660229139611370565b6040516370a0823160e01b81523060048201526000906001600160a01b038816906370a0823190602401602060405180830381865afa1580156105d6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105fa9190611a80565b9050600085858080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152505050506064810183905290506001600160a01b037f00000000000000000000000000000000000000000000000000000000000000008116908816036106b85760405162461bcd60e51b815260206004820152601f60248201527f4d657461526f7574657256323a20696e76616c696420726563697069656e7400604482015260640161026c565b863b8760008290036107205760405162461bcd60e51b815260206004820152602b60248201527f4d657461526f757465723a2063616c6c20666f722061206e6f6e2d636f6e747260448201526a1858dd081858d8dbdd5b9d60aa1b606482015260840161026c565b5050600080886001600160a01b03168360405161073d9190611aba565b6000604051808303816000865af19150503d806000811461077a576040519150601f19603f3d011682016040523d82523d6000602084013e61077f565b606091505b5091509150816107ab5761025381604051806060016040528060318152602001611bf560319139611370565b505050505050505050505050505050565b60006107cb6040830183611967565b91506107df905060e0830160c08401611ae7565b6108c9576001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016639fc314c861081f6040850185611967565b6000818110610830576108306119b1565b905060200201602081019061084591906119c7565b336040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b1681526001600160a01b0392831660048201529116602482015260a08501356044820152606401600060405180830381600087803b1580156108b057600080fd5b505af11580156108c4573d6000803e3d6000fd5b505050505b60a08201356108d883806119e2565b159050610bb5576108ef60e0840160c08501611ae7565b610943576109436109036040850185611967565b6000818110610914576109146119b1565b905060200201602081019061092991906119c7565b61093960808601606087016119c7565b8560a00135611515565b6001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001661097d60808501606086016119c7565b6001600160a01b0316036109d35760405162461bcd60e51b815260206004820181905260248201527f4d657461526f757465723a20696e76616c696420666972737420726f75746572604482015260640161026c565b6000806109e660808601606087016119c7565b9050803b915081600003610a505760405162461bcd60e51b815260206004820152602b60248201527f4d657461526f757465723a2063616c6c20666f722061206e6f6e2d636f6e747260448201526a1858dd081858d8dbdd5b9d60aa1b606482015260840161026c565b506000905080610a6660808601606087016119c7565b6001600160a01b031634610a7a87806119e2565b604051610a88929190611b04565b60006040518083038185875af1925050503d8060008114610ac5576040519150601f19603f3d011682016040523d82523d6000602084013e610aca565b606091505b509150915081610b1357610253816040518060400160405280601d81526020017f4d657461526f757465723a2066697273742073776170206661696c6564000000815250611370565b610b206040860186611967565b6001818110610b3157610b316119b1565b9050602002016020810190610b4691906119c7565b6040516370a0823160e01b81523060048201526001600160a01b0391909116906370a0823190602401602060405180830381865afa158015610b8c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610bb09190611a80565b925050505b80610bc360208501856119e2565b159050610f02576000610bd960208601866119e2565b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250505050602481018490529050610c6b610c266040870187611967565b610c31600288611a99565b818110610c4057610c406119b1565b9050602002016020810190610c5591906119c7565b610c6560a08801608089016119c7565b85611515565b6001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016610ca560a08701608088016119c7565b6001600160a01b031603610d215760405162461bcd60e51b815260206004820152602160248201527f4d657461526f757465723a20696e76616c6964207365636f6e6420726f75746560448201527f7200000000000000000000000000000000000000000000000000000000000000606482015260840161026c565b600080610d3460a08801608089016119c7565b9050803b915081600003610d9e5760405162461bcd60e51b815260206004820152602b60248201527f4d657461526f757465723a2063616c6c20666f722061206e6f6e2d636f6e747260448201526a1858dd081858d8dbdd5b9d60aa1b606482015260840161026c565b506000905080610db460a08801608089016119c7565b6001600160a01b031683604051610dcb9190611aba565b6000604051808303816000865af19150503d8060008114610e08576040519150601f19603f3d011682016040523d82523d6000602084013e610e0d565b606091505b509150915081610e5657610253816040518060400160405280601e81526020017f4d657461526f757465723a207365636f6e642073776170206661696c65640000815250611370565b610e636040880188611967565b610e6e600189611a99565b818110610e7d57610e7d6119b1565b9050602002016020810190610e9291906119c7565b6040516370a0823160e01b81523060048201526001600160a01b0391909116906370a0823190602401602060405180830381865afa158015610ed8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610efc9190611a80565b93505050505b610f58610f126040860186611967565b610f1d600187611a99565b818110610f2c57610f2c6119b1565b9050602002016020810190610f4191906119c7565b610f52610100870160e088016119c7565b83611515565b6000610f686101008601866119e2565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152505050506064810183905290506001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016610fe0610100870160e088016119c7565b6001600160a01b0316036110365760405162461bcd60e51b815260206004820152601d60248201527f4d657461526f757465723a20696e76616c696420726563697069656e74000000604482015260640161026c565b60008061104a610100880160e089016119c7565b9050803b9150816000036110b45760405162461bcd60e51b815260206004820152602b60248201527f4d657461526f757465723a2063616c6c20666f722061206e6f6e2d636f6e747260448201526a1858dd081858d8dbdd5b9d60aa1b606482015260840161026c565b5060009050806110cb610100880160e089016119c7565b6001600160a01b0316836040516110e29190611aba565b6000604051808303816000865af19150503d806000811461111f576040519150601f19603f3d011682016040523d82523d6000602084013e611124565b606091505b5091509150816111505761025381604051806060016040528060228152602001611c4860229139611370565b50505050505050565b600061119f88888888888080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152508a9250611207915050565b509050806111fd576111b28883896113a6565b604080516001600160a01b038481168252602082018a90528a168183015290517f0ac368c799fd87078497a837c3b184349108599d7c108f68710d3321ba416c6f9181900360600190a15b5050505050505050565b600060607f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316856001600160a01b03160361128c5760405162461bcd60e51b815260206004820152601f60248201527f4d657461526f757465723a20696e76616c696420726563656976655369646500604482015260640161026c565b611297878688611515565b838301869052843b8560008290036113055760405162461bcd60e51b815260206004820152602b60248201527f4d657461526f757465723a2063616c6c20666f722061206e6f6e2d636f6e747260448201526a1858dd081858d8dbdd5b9d60aa1b606482015260840161026c565b5050846001600160a01b03168460405161131f9190611aba565b6000604051808303816000865af19150503d806000811461135c576040519150601f19603f3d011682016040523d82523d6000602084013e611361565b606091505b50909890975095505050505050565b60606044835110156113835750806113a0565b6004830192508280602001905181019061139d9190611b2a565b90505b92915050565b604080516001600160a01b038481166024830152604480830185905283518084039091018152606490920183526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fa9059cbb0000000000000000000000000000000000000000000000000000000017905291516000928392908716916114309190611aba565b6000604051808303816000865af19150503d806000811461146d576040519150601f19603f3d011682016040523d82523d6000602084013e611472565b606091505b509150915081801561149c57508051158061149c57508080602001905181019061149c9190611bd7565b61150e5760405162461bcd60e51b815260206004820152602d60248201527f5472616e7366657248656c7065723a3a736166655472616e736665723a20747260448201527f616e73666572206661696c656400000000000000000000000000000000000000606482015260840161026c565b5050505050565b6040517fdd62ed3e0000000000000000000000000000000000000000000000000000000081523060048201526001600160a01b03838116602483015282919085169063dd62ed3e90604401602060405180830381865afa15801561157d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115a19190611a80565b101561051757604080516001600160a01b0380851660248301527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff604480840182905284518085039091018152606490930184526020830180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f095ea7b30000000000000000000000000000000000000000000000000000000017905292516105179387938793919260009283929087169161165c9190611aba565b6000604051808303816000865af19150503d8060008114611699576040519150601f19603f3d011682016040523d82523d6000602084013e61169e565b606091505b50915091508180156116c85750805115806116c85750808060200190518101906116c89190611bd7565b61150e5760405162461bcd60e51b815260206004820152602b60248201527f5472616e7366657248656c7065723a3a73616665417070726f76653a2061707060448201527f726f7665206661696c6564000000000000000000000000000000000000000000606482015260840161026c565b60006020828403121561174c57600080fd5b813567ffffffffffffffff81111561176357600080fd5b82016101a0818503121561177657600080fd5b9392505050565b80356001600160a01b038116811461179457600080fd5b919050565b60008083601f8401126117ab57600080fd5b50813567ffffffffffffffff8111156117c357600080fd5b6020830191508360208285010111156117db57600080fd5b9250929050565b600080600080600080600080600060e08a8c03121561180057600080fd5b6118098a61177d565b985060208a0135975061181e60408b0161177d565b965060608a013567ffffffffffffffff8082111561183b57600080fd5b6118478d838e01611799565b909850965086915061185b60808d0161177d565b955061186960a08d0161177d565b945060c08c013591508082111561187f57600080fd5b5061188c8c828d01611799565b915080935050809150509295985092959850929598565b6000602082840312156118b557600080fd5b813567ffffffffffffffff8111156118cc57600080fd5b8201610120818503121561177657600080fd5b600080600080600080600060c0888a0312156118fa57600080fd5b6119038861177d565b9650602088013595506119186040890161177d565b9450606088013567ffffffffffffffff81111561193457600080fd5b6119408a828b01611799565b9095509350506080880135915061195960a0890161177d565b905092959891949750929550565b6000808335601e1984360301811261197e57600080fd5b83018035915067ffffffffffffffff82111561199957600080fd5b6020019150600581901b36038213156117db57600080fd5b634e487b7160e01b600052603260045260246000fd5b6000602082840312156119d957600080fd5b61139d8261177d565b6000808335601e198436030181126119f957600080fd5b83018035915067ffffffffffffffff821115611a1457600080fd5b6020019150368190038213156117db57600080fd5b60005b83811015611a44578181015183820152602001611a2c565b50506000910152565b6020815260008251806020840152611a6c816040850160208701611a29565b601f01601f19169190910160400192915050565b600060208284031215611a9257600080fd5b5051919050565b818103818111156113a057634e487b7160e01b600052601160045260246000fd5b60008251611acc818460208701611a29565b9190910192915050565b8015158114611ae457600080fd5b50565b600060208284031215611af957600080fd5b813561177681611ad6565b8183823760009101908152919050565b634e487b7160e01b600052604160045260246000fd5b600060208284031215611b3c57600080fd5b815167ffffffffffffffff80821115611b5457600080fd5b818401915084601f830112611b6857600080fd5b815181811115611b7a57611b7a611b14565b604051601f8201601f19908116603f01168101908382118183101715611ba257611ba2611b14565b81604052828152876020848701011115611bbb57600080fd5b611bcc836020830160208801611a29565b979650505050505050565b600060208284031215611be957600080fd5b815161177681611ad656fe4d657461526f7574657256323a2072657665727453796e74686573697a65526571756573742063616c6c206661696c65644d657461526f7574657256323a20696e7465726e616c2073776170206661696c65644d657461526f757465723a206f7468657220736964652063616c6c206661696c6564a2646970667358221220e43087d55998d32a1ea51f6c6c67f4bfefbbfc45db588dd06fa6a78173de350564736f6c6343000813003360a060405234801561001057600080fd5b506040516104c43803806104c483398101604081905261002f91610040565b6001600160a01b0316608052610070565b60006020828403121561005257600080fd5b81516001600160a01b038116811461006957600080fd5b9392505050565b60805161042d6100976000396000818160550152818160a20152610171015261042d6000f3fe608060405234801561001057600080fd5b50600436106100365760003560e01c80639fc314c81461003b578063dbec15bb14610050575b600080fd5b61004e610049366004610363565b6100a0565b005b6100777f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390f35b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16331461016a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f53796d623a2063616c6c6572206973206e6f7420746865206d657461726f757460448201527f657200000000000000000000000000000000000000000000000000000000000060648201526084015b60405180910390fd5b61019683837f00000000000000000000000000000000000000000000000000000000000000008461019b565b505050565b6040805173ffffffffffffffffffffffffffffffffffffffff85811660248301528481166044830152606480830185905283518084039091018152608490920183526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f23b872dd00000000000000000000000000000000000000000000000000000000179052915160009283929088169161023a919061039f565b6000604051808303816000865af19150503d8060008114610277576040519150601f19603f3d011682016040523d82523d6000602084013e61027c565b606091505b50915091508180156102a65750805115806102a65750808060200190518101906102a691906103ce565b610332576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603160248201527f5472616e7366657248656c7065723a3a7472616e7366657246726f6d3a20747260448201527f616e7366657246726f6d206661696c65640000000000000000000000000000006064820152608401610161565b505050505050565b803573ffffffffffffffffffffffffffffffffffffffff8116811461035e57600080fd5b919050565b60008060006060848603121561037857600080fd5b6103818461033a565b925061038f6020850161033a565b9150604084013590509250925092565b6000825160005b818110156103c057602081860181015185830152016103a6565b506000920191825250919050565b6000602082840312156103e057600080fd5b815180151581146103f057600080fd5b939250505056fea2646970667358221220c0a640f0788ff6baf76b0d095644526d54523e286f36dc203f8fa98a9a972fe764736f6c63430008130033
Deployed Bytecode
0x60806040526004361061005a5760003560e01c8063a11b119811610043578063a11b1198146100a1578063c394a5da146100b4578063f5b697a51461010457600080fd5b80633bc788351461005f578063732cffe914610081575b600080fd5b34801561006b57600080fd5b5061007f61007a36600461173a565b610124565b005b34801561008d57600080fd5b5061007f61009c3660046117e2565b61051c565b61007f6100af3660046118a3565b6107bc565b3480156100c057600080fd5b506100e87f000000000000000000000000adb2d3b711bb8d8ea92ff70292c466140432c27881565b6040516001600160a01b03909116815260200160405180910390f35b34801561011057600080fd5b5061007f61011f3660046118df565b611159565b600061013360e0830183611967565b6000818110610144576101446119b1565b905060200201602081019061015991906119c7565b90506101696101208301836119e2565b1590506102ad5760008061020b61018360e0860186611967565b6000818110610194576101946119b1565b90506020020160208101906101a991906119c7565b60208601356101c0610120880161010089016119c7565b6101ce6101208901896119e2565b8080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525060249250611207915050565b915091508161027557610253816040518060400160405280602081526020017f4d657461526f757465723a20696e7465726e616c2073776170206661696c6564815250611370565b60405162461bcd60e51b815260040161026c9190611a4d565b60405180910390fd5b61028260e0850185611967565b6001818110610293576102936119b1565b90506020020160208101906102a891906119c7565b925050505b6102bb6101608301836119e2565b1590506103f457604082013560006102d76101608501856119e2565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920182905250608485018790526040516370a0823160e01b8152306004820152949550936001600160a01b03881693506370a0823192506024019050602060405180830381865afa15801561035a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061037e9190611a80565b90506000806103a6868461039a6101608b016101408c016119c7565b878b6101800135611207565b91509150816103ee57610253816040518060400160405280601d81526020017f4d657461526f757465723a2066696e616c2063616c6c206661696c6564000000815250611370565b50505050505b600061040360e0840184611967565b600161041260e0870187611967565b61041d929150611a99565b81811061042c5761042c6119b1565b905060200201602081019061044191906119c7565b6040516370a0823160e01b81523060048201526001600160a01b0391909116906370a0823190602401602060405180830381865afa158015610487573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104ab9190611a80565b90508015610517576105176104c360e0850185611967565b60016104d260e0880188611967565b6104dd929150611a99565b8181106104ec576104ec6119b1565b905060200201602081019061050191906119c7565b61051160e0860160c087016119c7565b836113a6565b505050565b6000806105648b8b8b8b8b8080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525060249250611207915050565b915091508161058f5761025381604051806060016040528060228152602001611c2660229139611370565b6040516370a0823160e01b81523060048201526000906001600160a01b038816906370a0823190602401602060405180830381865afa1580156105d6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105fa9190611a80565b9050600085858080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152505050506064810183905290506001600160a01b037f000000000000000000000000adb2d3b711bb8d8ea92ff70292c466140432c2788116908816036106b85760405162461bcd60e51b815260206004820152601f60248201527f4d657461526f7574657256323a20696e76616c696420726563697069656e7400604482015260640161026c565b863b8760008290036107205760405162461bcd60e51b815260206004820152602b60248201527f4d657461526f757465723a2063616c6c20666f722061206e6f6e2d636f6e747260448201526a1858dd081858d8dbdd5b9d60aa1b606482015260840161026c565b5050600080886001600160a01b03168360405161073d9190611aba565b6000604051808303816000865af19150503d806000811461077a576040519150601f19603f3d011682016040523d82523d6000602084013e61077f565b606091505b5091509150816107ab5761025381604051806060016040528060318152602001611bf560319139611370565b505050505050505050505050505050565b60006107cb6040830183611967565b91506107df905060e0830160c08401611ae7565b6108c9576001600160a01b037f000000000000000000000000adb2d3b711bb8d8ea92ff70292c466140432c27816639fc314c861081f6040850185611967565b6000818110610830576108306119b1565b905060200201602081019061084591906119c7565b336040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b1681526001600160a01b0392831660048201529116602482015260a08501356044820152606401600060405180830381600087803b1580156108b057600080fd5b505af11580156108c4573d6000803e3d6000fd5b505050505b60a08201356108d883806119e2565b159050610bb5576108ef60e0840160c08501611ae7565b610943576109436109036040850185611967565b6000818110610914576109146119b1565b905060200201602081019061092991906119c7565b61093960808601606087016119c7565b8560a00135611515565b6001600160a01b037f000000000000000000000000adb2d3b711bb8d8ea92ff70292c466140432c2781661097d60808501606086016119c7565b6001600160a01b0316036109d35760405162461bcd60e51b815260206004820181905260248201527f4d657461526f757465723a20696e76616c696420666972737420726f75746572604482015260640161026c565b6000806109e660808601606087016119c7565b9050803b915081600003610a505760405162461bcd60e51b815260206004820152602b60248201527f4d657461526f757465723a2063616c6c20666f722061206e6f6e2d636f6e747260448201526a1858dd081858d8dbdd5b9d60aa1b606482015260840161026c565b506000905080610a6660808601606087016119c7565b6001600160a01b031634610a7a87806119e2565b604051610a88929190611b04565b60006040518083038185875af1925050503d8060008114610ac5576040519150601f19603f3d011682016040523d82523d6000602084013e610aca565b606091505b509150915081610b1357610253816040518060400160405280601d81526020017f4d657461526f757465723a2066697273742073776170206661696c6564000000815250611370565b610b206040860186611967565b6001818110610b3157610b316119b1565b9050602002016020810190610b4691906119c7565b6040516370a0823160e01b81523060048201526001600160a01b0391909116906370a0823190602401602060405180830381865afa158015610b8c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610bb09190611a80565b925050505b80610bc360208501856119e2565b159050610f02576000610bd960208601866119e2565b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250505050602481018490529050610c6b610c266040870187611967565b610c31600288611a99565b818110610c4057610c406119b1565b9050602002016020810190610c5591906119c7565b610c6560a08801608089016119c7565b85611515565b6001600160a01b037f000000000000000000000000adb2d3b711bb8d8ea92ff70292c466140432c27816610ca560a08701608088016119c7565b6001600160a01b031603610d215760405162461bcd60e51b815260206004820152602160248201527f4d657461526f757465723a20696e76616c6964207365636f6e6420726f75746560448201527f7200000000000000000000000000000000000000000000000000000000000000606482015260840161026c565b600080610d3460a08801608089016119c7565b9050803b915081600003610d9e5760405162461bcd60e51b815260206004820152602b60248201527f4d657461526f757465723a2063616c6c20666f722061206e6f6e2d636f6e747260448201526a1858dd081858d8dbdd5b9d60aa1b606482015260840161026c565b506000905080610db460a08801608089016119c7565b6001600160a01b031683604051610dcb9190611aba565b6000604051808303816000865af19150503d8060008114610e08576040519150601f19603f3d011682016040523d82523d6000602084013e610e0d565b606091505b509150915081610e5657610253816040518060400160405280601e81526020017f4d657461526f757465723a207365636f6e642073776170206661696c65640000815250611370565b610e636040880188611967565b610e6e600189611a99565b818110610e7d57610e7d6119b1565b9050602002016020810190610e9291906119c7565b6040516370a0823160e01b81523060048201526001600160a01b0391909116906370a0823190602401602060405180830381865afa158015610ed8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610efc9190611a80565b93505050505b610f58610f126040860186611967565b610f1d600187611a99565b818110610f2c57610f2c6119b1565b9050602002016020810190610f4191906119c7565b610f52610100870160e088016119c7565b83611515565b6000610f686101008601866119e2565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152505050506064810183905290506001600160a01b037f000000000000000000000000adb2d3b711bb8d8ea92ff70292c466140432c27816610fe0610100870160e088016119c7565b6001600160a01b0316036110365760405162461bcd60e51b815260206004820152601d60248201527f4d657461526f757465723a20696e76616c696420726563697069656e74000000604482015260640161026c565b60008061104a610100880160e089016119c7565b9050803b9150816000036110b45760405162461bcd60e51b815260206004820152602b60248201527f4d657461526f757465723a2063616c6c20666f722061206e6f6e2d636f6e747260448201526a1858dd081858d8dbdd5b9d60aa1b606482015260840161026c565b5060009050806110cb610100880160e089016119c7565b6001600160a01b0316836040516110e29190611aba565b6000604051808303816000865af19150503d806000811461111f576040519150601f19603f3d011682016040523d82523d6000602084013e611124565b606091505b5091509150816111505761025381604051806060016040528060228152602001611c4860229139611370565b50505050505050565b600061119f88888888888080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152508a9250611207915050565b509050806111fd576111b28883896113a6565b604080516001600160a01b038481168252602082018a90528a168183015290517f0ac368c799fd87078497a837c3b184349108599d7c108f68710d3321ba416c6f9181900360600190a15b5050505050505050565b600060607f000000000000000000000000adb2d3b711bb8d8ea92ff70292c466140432c2786001600160a01b0316856001600160a01b03160361128c5760405162461bcd60e51b815260206004820152601f60248201527f4d657461526f757465723a20696e76616c696420726563656976655369646500604482015260640161026c565b611297878688611515565b838301869052843b8560008290036113055760405162461bcd60e51b815260206004820152602b60248201527f4d657461526f757465723a2063616c6c20666f722061206e6f6e2d636f6e747260448201526a1858dd081858d8dbdd5b9d60aa1b606482015260840161026c565b5050846001600160a01b03168460405161131f9190611aba565b6000604051808303816000865af19150503d806000811461135c576040519150601f19603f3d011682016040523d82523d6000602084013e611361565b606091505b50909890975095505050505050565b60606044835110156113835750806113a0565b6004830192508280602001905181019061139d9190611b2a565b90505b92915050565b604080516001600160a01b038481166024830152604480830185905283518084039091018152606490920183526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fa9059cbb0000000000000000000000000000000000000000000000000000000017905291516000928392908716916114309190611aba565b6000604051808303816000865af19150503d806000811461146d576040519150601f19603f3d011682016040523d82523d6000602084013e611472565b606091505b509150915081801561149c57508051158061149c57508080602001905181019061149c9190611bd7565b61150e5760405162461bcd60e51b815260206004820152602d60248201527f5472616e7366657248656c7065723a3a736166655472616e736665723a20747260448201527f616e73666572206661696c656400000000000000000000000000000000000000606482015260840161026c565b5050505050565b6040517fdd62ed3e0000000000000000000000000000000000000000000000000000000081523060048201526001600160a01b03838116602483015282919085169063dd62ed3e90604401602060405180830381865afa15801561157d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115a19190611a80565b101561051757604080516001600160a01b0380851660248301527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff604480840182905284518085039091018152606490930184526020830180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f095ea7b30000000000000000000000000000000000000000000000000000000017905292516105179387938793919260009283929087169161165c9190611aba565b6000604051808303816000865af19150503d8060008114611699576040519150601f19603f3d011682016040523d82523d6000602084013e61169e565b606091505b50915091508180156116c85750805115806116c85750808060200190518101906116c89190611bd7565b61150e5760405162461bcd60e51b815260206004820152602b60248201527f5472616e7366657248656c7065723a3a73616665417070726f76653a2061707060448201527f726f7665206661696c6564000000000000000000000000000000000000000000606482015260840161026c565b60006020828403121561174c57600080fd5b813567ffffffffffffffff81111561176357600080fd5b82016101a0818503121561177657600080fd5b9392505050565b80356001600160a01b038116811461179457600080fd5b919050565b60008083601f8401126117ab57600080fd5b50813567ffffffffffffffff8111156117c357600080fd5b6020830191508360208285010111156117db57600080fd5b9250929050565b600080600080600080600080600060e08a8c03121561180057600080fd5b6118098a61177d565b985060208a0135975061181e60408b0161177d565b965060608a013567ffffffffffffffff8082111561183b57600080fd5b6118478d838e01611799565b909850965086915061185b60808d0161177d565b955061186960a08d0161177d565b945060c08c013591508082111561187f57600080fd5b5061188c8c828d01611799565b915080935050809150509295985092959850929598565b6000602082840312156118b557600080fd5b813567ffffffffffffffff8111156118cc57600080fd5b8201610120818503121561177657600080fd5b600080600080600080600060c0888a0312156118fa57600080fd5b6119038861177d565b9650602088013595506119186040890161177d565b9450606088013567ffffffffffffffff81111561193457600080fd5b6119408a828b01611799565b9095509350506080880135915061195960a0890161177d565b905092959891949750929550565b6000808335601e1984360301811261197e57600080fd5b83018035915067ffffffffffffffff82111561199957600080fd5b6020019150600581901b36038213156117db57600080fd5b634e487b7160e01b600052603260045260246000fd5b6000602082840312156119d957600080fd5b61139d8261177d565b6000808335601e198436030181126119f957600080fd5b83018035915067ffffffffffffffff821115611a1457600080fd5b6020019150368190038213156117db57600080fd5b60005b83811015611a44578181015183820152602001611a2c565b50506000910152565b6020815260008251806020840152611a6c816040850160208701611a29565b601f01601f19169190910160400192915050565b600060208284031215611a9257600080fd5b5051919050565b818103818111156113a057634e487b7160e01b600052601160045260246000fd5b60008251611acc818460208701611a29565b9190910192915050565b8015158114611ae457600080fd5b50565b600060208284031215611af957600080fd5b813561177681611ad6565b8183823760009101908152919050565b634e487b7160e01b600052604160045260246000fd5b600060208284031215611b3c57600080fd5b815167ffffffffffffffff80821115611b5457600080fd5b818401915084601f830112611b6857600080fd5b815181811115611b7a57611b7a611b14565b604051601f8201601f19908116603f01168101908382118183101715611ba257611ba2611b14565b81604052828152876020848701011115611bbb57600080fd5b611bcc836020830160208801611a29565b979650505050505050565b600060208284031215611be957600080fd5b815161177681611ad656fe4d657461526f7574657256323a2072657665727453796e74686573697a65526571756573742063616c6c206661696c65644d657461526f7574657256323a20696e7465726e616c2073776170206661696c65644d657461526f757465723a206f7468657220736964652063616c6c206661696c6564a2646970667358221220e43087d55998d32a1ea51f6c6c67f4bfefbbfc45db588dd06fa6a78173de350564736f6c63430008130033
Loading...
Loading
Loading...
Loading
Loading...
Loading
Loading...
Loading
[ 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.