Overview
MNT Balance
MNT Value
$0.00Latest 25 from a total of 3,972 transactions
| Transaction Hash |
|
Block
|
From
|
To
|
|||||
|---|---|---|---|---|---|---|---|---|---|
| Swap Meta | 71035760 | 452 days ago | IN | 0 MNT | 0.07327537 | ||||
| Swap Meta | 71035556 | 452 days ago | IN | 0 MNT | 0.02960785 | ||||
| Swap Meta | 71034543 | 452 days ago | IN | 0 MNT | 0.19422317 | ||||
| Swap Meta | 71031913 | 452 days ago | IN | 0 MNT | 0.06207596 | ||||
| Swap Meta | 71031609 | 452 days ago | IN | 0 MNT | 0.11502054 | ||||
| Swap Meta | 71031537 | 452 days ago | IN | 0 MNT | 0.0687505 | ||||
| Swap Meta | 71031076 | 452 days ago | IN | 0 MNT | 0.14767815 | ||||
| Swap Meta | 71030883 | 452 days ago | IN | 0 MNT | 0.23054771 | ||||
| Swap Meta | 71030564 | 452 days ago | IN | 0 MNT | 0.15805631 | ||||
| Swap Meta | 71029976 | 452 days ago | IN | 0 MNT | 0.03084442 | ||||
| Swap Meta | 71028558 | 452 days ago | IN | 0 MNT | 0.05032524 | ||||
| Swap Meta | 71012217 | 452 days ago | IN | 0 MNT | 0.16086918 | ||||
| Swap Meta | 71002898 | 453 days ago | IN | 0 MNT | 0.03253915 | ||||
| Swap Meta | 70997655 | 453 days ago | IN | 0 MNT | 0.03927115 | ||||
| Swap Meta | 70996819 | 453 days ago | IN | 0 MNT | 0.05921131 | ||||
| Swap Meta | 70994035 | 453 days ago | IN | 0 MNT | 0.02196964 | ||||
| Swap Meta | 70988336 | 453 days ago | IN | 0 MNT | 0.02488769 | ||||
| Swap Meta | 70982999 | 453 days ago | IN | 2 MNT | 0.05625467 | ||||
| Swap Meta | 70975521 | 453 days ago | IN | 0 MNT | 0.04785598 | ||||
| Swap Meta | 70975231 | 453 days ago | IN | 0 MNT | 0.05005923 | ||||
| Swap Meta | 70974923 | 453 days ago | IN | 39.25 MNT | 0.04085344 | ||||
| Swap Meta | 70974665 | 453 days ago | IN | 0 MNT | 0.01366683 | ||||
| Swap Meta | 70974086 | 453 days ago | IN | 0 MNT | 0.1031867 | ||||
| Swap Meta | 70970561 | 453 days ago | IN | 4.2 MNT | 0.0221202 | ||||
| Swap Meta | 70942442 | 454 days ago | IN | 0 MNT | 0.0209137 |
Latest 25 internal transactions (View All)
| Parent Transaction Hash | Block | From | To | |||
|---|---|---|---|---|---|---|
| 70982999 | 453 days ago | 2 MNT | ||||
| 70974923 | 453 days ago | 39.25 MNT | ||||
| 70970561 | 453 days ago | 4.2 MNT | ||||
| 70900950 | 455 days ago | 6,703 MNT | ||||
| 70900931 | 455 days ago | 6,500 MNT | ||||
| 70900849 | 455 days ago | 8,060 MNT | ||||
| 70900473 | 455 days ago | 4,995 MNT | ||||
| 70880556 | 455 days ago | 100 MNT | ||||
| 70694459 | 460 days ago | 9 MNT | ||||
| 70666035 | 460 days ago | 805 MNT | ||||
| 70665090 | 460 days ago | 3 MNT | ||||
| 70523672 | 464 days ago | 20 MNT | ||||
| 70469921 | 465 days ago | 0.2 MNT | ||||
| 70402440 | 467 days ago | 7 MNT | ||||
| 70398611 | 467 days ago | 2 MNT | ||||
| 70397173 | 467 days ago | 2 MNT | ||||
| 70397114 | 467 days ago | 1 MNT | ||||
| 70396432 | 467 days ago | 1 MNT | ||||
| 70396181 | 467 days ago | 2 MNT | ||||
| 70395469 | 467 days ago | 2 MNT | ||||
| 70395056 | 467 days ago | 2 MNT | ||||
| 70381435 | 467 days ago | 1 MNT | ||||
| 70309060 | 469 days ago | 3 MNT | ||||
| 70296004 | 469 days ago | 30 MNT | ||||
| 70292312 | 469 days ago | 25.42194618 MNT |
Cross-Chain Transactions
Contract Source Code (Solidity Standard Json-Input format)
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.25;
////////////////////////////////////////////////////
// Minimal meta swap aggregation contract
// - Allows simulation to validate receiver amount
// - Owner can enable/disable valid swap targets
// - Swap aggregation calls are assumed to already
// check for slippage and send funds directly to the
// user-defined receiver
// - Owner can rescue funds in case the aggregator has
// this contract as receiver address
////////////////////////////////////////////////////
contract DeltaMetaAggregator {
////////////////////////////////////////////////////
// Errors
////////////////////////////////////////////////////
error SimulationResults(bool success, uint256 amountReceived, string data);
error InvalidTarget();
error NotOwner();
error Paused();
error HasMsgValue();
////////////////////////////////////////////////////
// State
////////////////////////////////////////////////////
/// @notice maps approvalTarget to swapTarget to bool
mapping(address => mapping(address => bool)) private _validTargets;
/// @notice contract owner
address public OWNER;
////////////////////////////////////////////////////
// Constants
////////////////////////////////////////////////////
uint256 private constant MAX_UINT = 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff;
////////////////////////////////////////////////////
// Constructor, assigns initial owner
////////////////////////////////////////////////////
constructor() {
OWNER = msg.sender;
}
////////////////////////////////////////////////////
// Receive function for native swaps
////////////////////////////////////////////////////
receive() external payable {}
////////////////////////////////////////////////////
// Modifier
////////////////////////////////////////////////////
modifier onlyOwner() {
if (msg.sender != OWNER) revert NotOwner();
_;
}
////////////////////////////////////////////////////
// Owner functions
////////////////////////////////////////////////////
function transferOwnership(address newOwner) external onlyOwner {
OWNER = newOwner;
}
function setValidTarget(address approvalTarget, address swapTarget, bool value) external onlyOwner {
_validTargets[approvalTarget][swapTarget] = value;
}
function rescueFunds(address asset) external onlyOwner {
if (asset == address(0)) {
uint256 balance = address(this).balance;
if (balance != 0) {
(bool success, ) = payable(msg.sender).call{value: balance}("");
if (!success) revert();
}
} else {
uint256 balance = _balanceOf(asset, address(this));
if (balance != 0) _transferERC20Tokens(asset, msg.sender, balance);
}
}
////////////////////////////////////////////////////
// Swap functions
////////////////////////////////////////////////////
/**
* Executes meta aggregation swap.
* Can only be executed on valid approval- and swap target combo.
* Note that the receiver address has to be manually set in
* the aggregation call, otherwise, the funds might remain in this contract
* Ideally this function is executed after an simulation via `simSwapMeta`
* @param assetIn token input address, user zero address for native
* @param amountIn input amount, ignored for native transfer
* @param approvalTarget approve this target when swapping (only if allowance too low)
* @param swapTarget swap aggregation executor
* @param swapData swap calldata
*/
function swapMeta(
address assetIn,
uint256 amountIn,
address approvalTarget,
address swapTarget,
bytes calldata swapData //
) external payable {
// zero address assumes native transfer
if (assetIn != address(0)) {
if (msg.value != 0) revert HasMsgValue();
// pull balance
_transferERC20TokensFrom(assetIn, amountIn);
// approve if no allowance
_approveIfBelow(assetIn, approvalTarget, amountIn);
}
// validate approval- and swap target
_validateCall(approvalTarget, swapTarget);
(bool success, bytes memory returnData) = swapTarget.call{value: msg.value}(swapData);
if (!success) {
// Next 5 lines from https://ethereum.stackexchange.com/a/83577
if (returnData.length < 68) revert();
assembly {
returnData := add(returnData, 0x04)
}
revert(abi.decode(returnData, (string)));
}
}
/**
* Simulates the swap aggregation. Should be called before `swapMeta`
* Always reverts.
* Ideally called via staticcall, the return object contains
* the balance change of the `receiver` address.
* @param assetIn token in address, zero address for native
* @param amountIn input amount
* @param assetOut token out, zero address for native
* @param receiver recipient of swap
* @param approvalTarget address to be approved
* @param swapTarget swap aggregator
* @param swapData swap calldata
*/
function simSwapMeta(
address assetIn,
uint256 amountIn,
address assetOut,
address receiver,
address approvalTarget,
address swapTarget,
bytes calldata swapData //
) external payable returns (uint256 amountReceived) {
// zero address assumes native transfer
if (assetIn != address(0)) {
if (msg.value != 0) revert HasMsgValue();
// pull balance
_transferERC20TokensFrom(assetIn, amountIn);
// approve if no allowance
_approveIfBelow(assetIn, approvalTarget, amountIn);
}
// get initial balane of receiver
uint256 before = _balanceOf(assetOut, receiver);
(bool success, bytes memory returnData) = swapTarget.call{value: msg.value}(swapData);
if (!success) {
// Next 5 lines from https://ethereum.stackexchange.com/a/83577
if (returnData.length < 68) revert();
assembly {
returnData := add(returnData, 0x04)
}
revert SimulationResults(false, 0, abi.decode(returnData, (string)));
}
// get net amount received
amountReceived = _balanceOf(assetOut, receiver) - before;
revert SimulationResults(success, amountReceived, "");
}
////////////////////////////////////////////////////
// Read functions
////////////////////////////////////////////////////
function isValidTarget(address approvalTarget, address swapTarget) external view returns (bool) {
return _validTargets[approvalTarget][swapTarget];
}
////////////////////////////////////////////////////
// Internals
////////////////////////////////////////////////////
/// @dev chcecks whether both addresses are validTargets
function _validateCall(address approvalTarget, address swapTarget) private view {
if (!_validTargets[approvalTarget][swapTarget]) revert InvalidTarget();
}
/// @dev Calls `IERC20Token(token).approve()` and sets the allowance to the
/// maximum if the current approval is not already >= an amount.
/// Reverts if the return data is invalid or the call reverts.
/// @param token The address of the token contract.
/// @param spender The address that receives an allowance.
/// @param amount The minimum allowance needed.
function _approveIfBelow(address token, address spender, uint256 amount) private {
assembly {
let ptr := mload(0x40)
////////////////////////////////////////////////////
// get allowance and validate returndata
////////////////////////////////////////////////////
mstore(ptr, 0xdd62ed3e00000000000000000000000000000000000000000000000000000000)
mstore(add(ptr, 0x4), address())
mstore(add(ptr, 0x24), spender)
// call to token
// success is false or return data not provided
if or(iszero(staticcall(gas(), token, ptr, 0x44, ptr, 0x20)), lt(returndatasize(), 0x20)) {
revert(0x0, 0x0)
}
// approve if necessary
if lt(mload(ptr), amount) {
////////////////////////////////////////////////////
// Approve, at this point it is clear that the target is nonzero
////////////////////////////////////////////////////
// selector for approve(address,uint256)
mstore(ptr, 0x095ea7b300000000000000000000000000000000000000000000000000000000)
mstore(add(ptr, 0x04), spender)
mstore(add(ptr, 0x24), MAX_UINT)
if iszero(call(gas(), token, 0x0, ptr, 0x44, ptr, 32)) {
revert(0x0, 0x0)
}
}
}
}
/// @dev balanceOf call in assembly, compatible for both native (user address zero for underlying) and ERC20
function _balanceOf(address underlying, address entity) private view returns (uint256 entityBalance) {
assembly {
switch iszero(underlying)
case 1 {
entityBalance := balance(entity)
}
default {
////////////////////////////////////////////////////
// get token balance in assembly usingn scrap space (64 bytes)
////////////////////////////////////////////////////
// selector for balanceOf(address)
mstore(0x0, 0x70a0823100000000000000000000000000000000000000000000000000000000)
// add this address as parameter
mstore(0x4, entity)
// call to underlying
if iszero(staticcall(gas(), underlying, 0x0, 0x24, 0x0, 0x20)) {
revert(0x0, 0x0)
}
entityBalance := mload(0x0)
}
}
}
/// @dev Transfers ERC20 tokens from ourselves to `to`.
/// @param token The token to spend.
/// @param to The recipient of the tokens.
/// @param amount The amount of `token` to transfer.
function _transferERC20Tokens(address token, address to, uint256 amount) private {
assembly {
let ptr := mload(0x40) // free memory pointer
// selector for transfer(address,uint256)
mstore(ptr, 0xa9059cbb00000000000000000000000000000000000000000000000000000000)
mstore(add(ptr, 0x04), to)
mstore(add(ptr, 0x24), amount)
let success := call(gas(), token, 0x0, ptr, 0x44, ptr, 32)
let rdsize := returndatasize()
// Check for ERC20 success. ERC20 tokens should return a boolean,
// but some don't. We accept 0-length return data as success, or at
// least 32 bytes that starts with a 32-byte boolean true.
success := and(
success, // call itself succeeded
or(
iszero(rdsize), // no return data, or
and(
iszero(lt(rdsize, 32)), // at least 32 bytes
eq(mload(ptr), 1) // starts with uint256(1)
)
)
)
if iszero(success) {
returndatacopy(ptr, 0x0, rdsize)
revert(ptr, rdsize)
}
}
}
/// @dev Transfers ERC20 tokens from msg.sender to address(this).
/// @param token The token to spend.
/// @param amount The amount of `token` to transfer.
function _transferERC20TokensFrom(address token, uint256 amount) private {
assembly {
let ptr := mload(0x40) // free memory pointer
// selector for transferFrom(address,address,uint256)
mstore(ptr, 0x23b872dd00000000000000000000000000000000000000000000000000000000)
mstore(add(ptr, 0x04), caller())
mstore(add(ptr, 0x24), address())
mstore(add(ptr, 0x44), amount)
let success := call(gas(), token, 0x0, ptr, 0x64, ptr, 32)
let rdsize := returndatasize()
// Check for ERC20 success. ERC20 tokens should return a boolean,
// but some don't. We accept 0-length return data as success, or at
// least 32 bytes that starts with a 32-byte boolean true.
success := and(
success, // call itself succeeded
or(
iszero(rdsize), // no return data, or
and(
iszero(lt(rdsize, 32)), // at least 32 bytes
eq(mload(ptr), 1) // starts with uint256(1)
)
)
)
if iszero(success) {
returndatacopy(ptr, 0x0, rdsize)
revert(ptr, rdsize)
}
}
}
}{
"evmVersion": "paris",
"libraries": {},
"metadata": {
"useLiteralContent": true
},
"optimizer": {
"enabled": true,
"runs": 1000000
},
"outputSelection": {
"*": {
"*": [
"evm.bytecode",
"evm.deployedBytecode",
"devdoc",
"userdoc",
"metadata",
"abi"
]
}
}
}Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
Contract ABI
API[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[],"name":"HasMsgValue","type":"error"},{"inputs":[],"name":"InvalidTarget","type":"error"},{"inputs":[],"name":"NotOwner","type":"error"},{"inputs":[],"name":"Paused","type":"error"},{"inputs":[{"internalType":"bool","name":"success","type":"bool"},{"internalType":"uint256","name":"amountReceived","type":"uint256"},{"internalType":"string","name":"data","type":"string"}],"name":"SimulationResults","type":"error"},{"inputs":[],"name":"OWNER","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"approvalTarget","type":"address"},{"internalType":"address","name":"swapTarget","type":"address"}],"name":"isValidTarget","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"asset","type":"address"}],"name":"rescueFunds","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"approvalTarget","type":"address"},{"internalType":"address","name":"swapTarget","type":"address"},{"internalType":"bool","name":"value","type":"bool"}],"name":"setValidTarget","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"assetIn","type":"address"},{"internalType":"uint256","name":"amountIn","type":"uint256"},{"internalType":"address","name":"assetOut","type":"address"},{"internalType":"address","name":"receiver","type":"address"},{"internalType":"address","name":"approvalTarget","type":"address"},{"internalType":"address","name":"swapTarget","type":"address"},{"internalType":"bytes","name":"swapData","type":"bytes"}],"name":"simSwapMeta","outputs":[{"internalType":"uint256","name":"amountReceived","type":"uint256"}],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"assetIn","type":"address"},{"internalType":"uint256","name":"amountIn","type":"uint256"},{"internalType":"address","name":"approvalTarget","type":"address"},{"internalType":"address","name":"swapTarget","type":"address"},{"internalType":"bytes","name":"swapData","type":"bytes"}],"name":"swapMeta","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]Contract Creation Code
6080604052348015600f57600080fd5b50600180546001600160a01b03191633179055610dcb806100316000396000f3fe6080604052600436106100745760003560e01c806394d8a8191161004e57806394d8a8191461011c578063e53b20171461013c578063f2fde38b1461015c578063ffb714101461017c57600080fd5b8063117803e3146100805780633838eb1e146100d757806348fc093e146100ec57600080fd5b3661007b57005b600080fd5b34801561008c57600080fd5b506001546100ad9073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b6100ea6100e53660046109e6565b61019d565b005b3480156100f857600080fd5b5061010c610107366004610a65565b6102f6565b60405190151581526020016100ce565b34801561012857600080fd5b506100ea610137366004610a98565b610331565b34801561014857600080fd5b506100ea610157366004610ae4565b6103e5565b34801561016857600080fd5b506100ea610177366004610ae4565b6104d2565b61018f61018a366004610b06565b61056a565b6040519081526020016100ce565b73ffffffffffffffffffffffffffffffffffffffff8616156102065734156101f1576040517ff6a7390200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6101fb868661071e565b610206868587610789565b6102108484610846565b6000808473ffffffffffffffffffffffffffffffffffffffff1634858560405161023b929190610ba6565b60006040518083038185875af1925050503d8060008114610278576040519150601f19603f3d011682016040523d82523d6000602084013e61027d565b606091505b5091509150816102ec5760448151101561029657600080fd5b600481019050808060200190518101906102b09190610c09565b6040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016102e39190610d1e565b60405180910390fd5b5050505050505050565b73ffffffffffffffffffffffffffffffffffffffff8083166000908152602081815260408083209385168352929052205460ff165b92915050565b60015473ffffffffffffffffffffffffffffffffffffffff163314610382576040517f30cd747100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff9283166000908152602081815260408083209490951682529290925291902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016911515919091179055565b60015473ffffffffffffffffffffffffffffffffffffffff163314610436576040517f30cd747100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff81166104b3574780156104af57604051600090339083908381818185875af1925050503d806000811461049a576040519150601f19603f3d011682016040523d82523d6000602084013e61049f565b606091505b50509050806104ad57600080fd5b505b5050565b60006104bf82306108b0565b905080156104af576104af82338361090e565b60015473ffffffffffffffffffffffffffffffffffffffff163314610523576040517f30cd747100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b600073ffffffffffffffffffffffffffffffffffffffff8916156105d55734156105c0576040517ff6a7390200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6105ca898961071e565b6105d589868a610789565b60006105e188886108b0565b90506000808673ffffffffffffffffffffffffffffffffffffffff1634878760405161060e929190610ba6565b60006040518083038185875af1925050503d806000811461064b576040519150601f19603f3d011682016040523d82523d6000602084013e610650565b606091505b5091509150816106bb5760448151101561066957600080fd5b600481019050600080828060200190518101906106869190610c09565b6040517fa143ebdd0000000000000000000000000000000000000000000000000000000081526004016102e393929190610d31565b826106c68b8b6108b0565b6106d09190610d5b565b6040517fa143ebdd00000000000000000000000000000000000000000000000000000000815283151560048201526024810182905260606044820152600060648201529094506084016102e3565b6040517f23b872dd0000000000000000000000000000000000000000000000000000000081523360048201523060248201528160448201526020816064836000875af13d6001835114602082101516811517821691508161078257806000843e8083fd5b5050505050565b6040517fdd62ed3e00000000000000000000000000000000000000000000000000000000815230600482015282602482015260203d10602082604484885afa1517156107d457600080fd5b8181511015610840577f095ea7b30000000000000000000000000000000000000000000000000000000081528260048201527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60248201526020816044836000885af161084057600080fd5b50505050565b73ffffffffffffffffffffffffffffffffffffffff8083166000908152602081815260408083209385168352929052205460ff166104af576040517f82d5d76a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000821560018114610902577f70a0823100000000000000000000000000000000000000000000000000000000600052826004526020600060246000875afa6108f857600080fd5b6000519150610907565b823191505b5092915050565b6040517fa9059cbb0000000000000000000000000000000000000000000000000000000081528260048201528160248201526020816044836000885af13d6001835114602082101516811517821691508161096c57806000843e8083fd5b505050505050565b803573ffffffffffffffffffffffffffffffffffffffff8116811461099857600080fd5b919050565b60008083601f8401126109af57600080fd5b50813567ffffffffffffffff8111156109c757600080fd5b6020830191508360208285010111156109df57600080fd5b9250929050565b60008060008060008060a087890312156109ff57600080fd5b610a0887610974565b955060208701359450610a1d60408801610974565b9350610a2b60608801610974565b9250608087013567ffffffffffffffff811115610a4757600080fd5b610a5389828a0161099d565b979a9699509497509295939492505050565b60008060408385031215610a7857600080fd5b610a8183610974565b9150610a8f60208401610974565b90509250929050565b600080600060608486031215610aad57600080fd5b610ab684610974565b9250610ac460208501610974565b915060408401358015158114610ad957600080fd5b809150509250925092565b600060208284031215610af657600080fd5b610aff82610974565b9392505050565b60008060008060008060008060e0898b031215610b2257600080fd5b610b2b89610974565b975060208901359650610b4060408a01610974565b9550610b4e60608a01610974565b9450610b5c60808a01610974565b9350610b6a60a08a01610974565b925060c089013567ffffffffffffffff811115610b8657600080fd5b610b928b828c0161099d565b999c989b5096995094979396929594505050565b8183823760009101908152919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60005b83811015610c00578181015183820152602001610be8565b50506000910152565b600060208284031215610c1b57600080fd5b815167ffffffffffffffff80821115610c3357600080fd5b818401915084601f830112610c4757600080fd5b815181811115610c5957610c59610bb6565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f01168101908382118183101715610c9f57610c9f610bb6565b81604052828152876020848701011115610cb857600080fd5b610cc9836020830160208801610be5565b979650505050505050565b60008151808452610cec816020860160208601610be5565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b602081526000610aff6020830184610cd4565b8315158152826020820152606060408201526000610d526060830184610cd4565b95945050505050565b8181038181111561032b577f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fdfea2646970667358221220cdfa4466e880d01d337d01ee1e5cc11fa95623da712666940d099dc71131180c64736f6c63430008190033
Deployed Bytecode
0x6080604052600436106100745760003560e01c806394d8a8191161004e57806394d8a8191461011c578063e53b20171461013c578063f2fde38b1461015c578063ffb714101461017c57600080fd5b8063117803e3146100805780633838eb1e146100d757806348fc093e146100ec57600080fd5b3661007b57005b600080fd5b34801561008c57600080fd5b506001546100ad9073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b6100ea6100e53660046109e6565b61019d565b005b3480156100f857600080fd5b5061010c610107366004610a65565b6102f6565b60405190151581526020016100ce565b34801561012857600080fd5b506100ea610137366004610a98565b610331565b34801561014857600080fd5b506100ea610157366004610ae4565b6103e5565b34801561016857600080fd5b506100ea610177366004610ae4565b6104d2565b61018f61018a366004610b06565b61056a565b6040519081526020016100ce565b73ffffffffffffffffffffffffffffffffffffffff8616156102065734156101f1576040517ff6a7390200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6101fb868661071e565b610206868587610789565b6102108484610846565b6000808473ffffffffffffffffffffffffffffffffffffffff1634858560405161023b929190610ba6565b60006040518083038185875af1925050503d8060008114610278576040519150601f19603f3d011682016040523d82523d6000602084013e61027d565b606091505b5091509150816102ec5760448151101561029657600080fd5b600481019050808060200190518101906102b09190610c09565b6040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016102e39190610d1e565b60405180910390fd5b5050505050505050565b73ffffffffffffffffffffffffffffffffffffffff8083166000908152602081815260408083209385168352929052205460ff165b92915050565b60015473ffffffffffffffffffffffffffffffffffffffff163314610382576040517f30cd747100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff9283166000908152602081815260408083209490951682529290925291902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016911515919091179055565b60015473ffffffffffffffffffffffffffffffffffffffff163314610436576040517f30cd747100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff81166104b3574780156104af57604051600090339083908381818185875af1925050503d806000811461049a576040519150601f19603f3d011682016040523d82523d6000602084013e61049f565b606091505b50509050806104ad57600080fd5b505b5050565b60006104bf82306108b0565b905080156104af576104af82338361090e565b60015473ffffffffffffffffffffffffffffffffffffffff163314610523576040517f30cd747100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b600073ffffffffffffffffffffffffffffffffffffffff8916156105d55734156105c0576040517ff6a7390200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6105ca898961071e565b6105d589868a610789565b60006105e188886108b0565b90506000808673ffffffffffffffffffffffffffffffffffffffff1634878760405161060e929190610ba6565b60006040518083038185875af1925050503d806000811461064b576040519150601f19603f3d011682016040523d82523d6000602084013e610650565b606091505b5091509150816106bb5760448151101561066957600080fd5b600481019050600080828060200190518101906106869190610c09565b6040517fa143ebdd0000000000000000000000000000000000000000000000000000000081526004016102e393929190610d31565b826106c68b8b6108b0565b6106d09190610d5b565b6040517fa143ebdd00000000000000000000000000000000000000000000000000000000815283151560048201526024810182905260606044820152600060648201529094506084016102e3565b6040517f23b872dd0000000000000000000000000000000000000000000000000000000081523360048201523060248201528160448201526020816064836000875af13d6001835114602082101516811517821691508161078257806000843e8083fd5b5050505050565b6040517fdd62ed3e00000000000000000000000000000000000000000000000000000000815230600482015282602482015260203d10602082604484885afa1517156107d457600080fd5b8181511015610840577f095ea7b30000000000000000000000000000000000000000000000000000000081528260048201527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60248201526020816044836000885af161084057600080fd5b50505050565b73ffffffffffffffffffffffffffffffffffffffff8083166000908152602081815260408083209385168352929052205460ff166104af576040517f82d5d76a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000821560018114610902577f70a0823100000000000000000000000000000000000000000000000000000000600052826004526020600060246000875afa6108f857600080fd5b6000519150610907565b823191505b5092915050565b6040517fa9059cbb0000000000000000000000000000000000000000000000000000000081528260048201528160248201526020816044836000885af13d6001835114602082101516811517821691508161096c57806000843e8083fd5b505050505050565b803573ffffffffffffffffffffffffffffffffffffffff8116811461099857600080fd5b919050565b60008083601f8401126109af57600080fd5b50813567ffffffffffffffff8111156109c757600080fd5b6020830191508360208285010111156109df57600080fd5b9250929050565b60008060008060008060a087890312156109ff57600080fd5b610a0887610974565b955060208701359450610a1d60408801610974565b9350610a2b60608801610974565b9250608087013567ffffffffffffffff811115610a4757600080fd5b610a5389828a0161099d565b979a9699509497509295939492505050565b60008060408385031215610a7857600080fd5b610a8183610974565b9150610a8f60208401610974565b90509250929050565b600080600060608486031215610aad57600080fd5b610ab684610974565b9250610ac460208501610974565b915060408401358015158114610ad957600080fd5b809150509250925092565b600060208284031215610af657600080fd5b610aff82610974565b9392505050565b60008060008060008060008060e0898b031215610b2257600080fd5b610b2b89610974565b975060208901359650610b4060408a01610974565b9550610b4e60608a01610974565b9450610b5c60808a01610974565b9350610b6a60a08a01610974565b925060c089013567ffffffffffffffff811115610b8657600080fd5b610b928b828c0161099d565b999c989b5096995094979396929594505050565b8183823760009101908152919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60005b83811015610c00578181015183820152602001610be8565b50506000910152565b600060208284031215610c1b57600080fd5b815167ffffffffffffffff80821115610c3357600080fd5b818401915084601f830112610c4757600080fd5b815181811115610c5957610c59610bb6565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f01168101908382118183101715610c9f57610c9f610bb6565b81604052828152876020848701011115610cb857600080fd5b610cc9836020830160208801610be5565b979650505050505050565b60008151808452610cec816020860160208601610be5565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b602081526000610aff6020830184610cd4565b8315158152826020820152606060408201526000610d526060830184610cd4565b95945050505050565b8181038181111561032b577f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fdfea2646970667358221220cdfa4466e880d01d337d01ee1e5cc11fa95623da712666940d099dc71131180c64736f6c63430008190033
Net Worth in USD
Net Worth in MNT
Multichain Portfolio | 35 Chains
| Chain | Token | Portfolio % | Price | Amount | Value |
|---|
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.