Source Code
Overview
ETH Balance
0 ETH
ETH Value
$0.00| Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
|---|---|---|---|---|---|---|---|---|---|
Latest 25 internal transactions (View All)
Advanced mode:
| Parent Transaction Hash | Block | From | To | |||
|---|---|---|---|---|---|---|
| 10061391 | 76 days ago | 0.000066 ETH | ||||
| 10061391 | 76 days ago | 0.000066 ETH | ||||
| 9974071 | 77 days ago | 0.0000001 ETH | ||||
| 9974071 | 77 days ago | 0.0000001 ETH | ||||
| 9958977 | 77 days ago | 0.00001 ETH | ||||
| 9958977 | 77 days ago | 0.00001 ETH | ||||
| 9940494 | 77 days ago | 0.00001 ETH | ||||
| 9940494 | 77 days ago | 0.00001 ETH | ||||
| 9918740 | 77 days ago | 0.00001 ETH | ||||
| 9918740 | 77 days ago | 0.00001 ETH | ||||
| 9916608 | 77 days ago | 0.000001 ETH | ||||
| 9916608 | 77 days ago | 0.000001 ETH | ||||
| 9915903 | 77 days ago | 0.000001 ETH | ||||
| 9915903 | 77 days ago | 0.000001 ETH | ||||
| 9915704 | 77 days ago | 0.000001 ETH | ||||
| 9915704 | 77 days ago | 0.000001 ETH | ||||
| 9911367 | 77 days ago | 0.00000089 ETH | ||||
| 9911367 | 77 days ago | 0.00000089 ETH | ||||
| 9909898 | 77 days ago | 0.000001 ETH | ||||
| 9909898 | 77 days ago | 0.000001 ETH | ||||
| 9907743 | 77 days ago | 0.0000005 ETH | ||||
| 9907743 | 77 days ago | 0.0000005 ETH | ||||
| 9904997 | 77 days ago | 0.0000001 ETH | ||||
| 9904997 | 77 days ago | 0.0000001 ETH | ||||
| 9904819 | 77 days ago | 0.0000001 ETH |
Cross-Chain Transactions
Loading...
Loading
Contract Source Code Verified (Exact Match)
Contract Name:
AggregatorGuard
Compiler Version
v0.8.26+commit.8a97fa7a
Optimization Enabled:
Yes with 1000000 runs
Other Settings:
paris EvmVersion
Contract Source Code (Solidity Standard Json-Input format)
// SPDX-License-Identifier: MIT
pragma solidity 0.8.26;
import "@openzeppelin/contracts/token/ERC20/IERC20.sol";
import "./interfaces/IAggregatorExecutor.sol";
contract AggregatorGuard {
address constant ETH = 0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE;
event AggregatedTrade(
uint16 indexed id,
address indexed user,
address tokenIn,
address tokenOut,
address executor,
uint256 amountIn,
uint256 amountOut,
uint256 minAmountOut
);
receive() external payable { }
fallback() external payable { } // optional, add for remix to allow low level interactions
function IceCreamSwap() external payable returns (uint256) {
uint16 id;
IAggregatorExecutor executor;
uint128 amountIn;
uint128 minAmountOut;
address firstTokenReceiver;
address recipient;
IERC20 tokenIn;
IERC20 tokenOut;
assembly {
id := shr(240, calldataload(4))
executor := shr(96, calldataload(6))
amountIn := shr(128, calldataload(26))
minAmountOut := shr(128, calldataload(42))
firstTokenReceiver := shr(96, calldataload(59))
recipient := shr(96, calldataload(79))
tokenIn := shr(96, calldataload(99))
tokenOut := shr(96, calldataload(119))
}
if (address(tokenIn) != ETH) {
// no need to check this token transfer, as a non sucessfull transfer would just cause a failed swap
if (amountIn != 0) {
tokenIn.transferFrom(msg.sender, firstTokenReceiver, amountIn);
}
} else {
require(amountIn == msg.value, "incorrect value");
require(firstTokenReceiver == address(executor), "Native receiver must bee executor");
}
uint256 balanceBefore = (address(tokenOut) == ETH) ? recipient.balance : tokenOut.balanceOf(recipient);
executor.executeSwap{value: msg.value}(msg.data[26:]);
uint256 amountOut;
if (address(tokenOut) != ETH) {
amountOut = tokenOut.balanceOf(recipient) - balanceBefore;
} else {
amountOut = recipient.balance - balanceBefore;
}
require(amountOut >= minAmountOut, "Insufficient output");
emit AggregatedTrade(
id,
recipient,
address(tokenIn),
address(tokenOut),
address(executor),
amountIn,
amountOut,
minAmountOut
);
return amountOut;
}
}// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v5.1.0) (token/ERC20/IERC20.sol)
pragma solidity ^0.8.20;
/**
* @dev Interface of the ERC-20 standard as defined in the ERC.
*/
interface IERC20 {
/**
* @dev Emitted when `value` tokens are moved from one account (`from`) to
* another (`to`).
*
* Note that `value` may be zero.
*/
event Transfer(address indexed from, address indexed to, uint256 value);
/**
* @dev Emitted when the allowance of a `spender` for an `owner` is set by
* a call to {approve}. `value` is the new allowance.
*/
event Approval(address indexed owner, address indexed spender, uint256 value);
/**
* @dev Returns the value of tokens in existence.
*/
function totalSupply() external view returns (uint256);
/**
* @dev Returns the value of tokens owned by `account`.
*/
function balanceOf(address account) external view returns (uint256);
/**
* @dev Moves a `value` amount of tokens from the caller's account to `to`.
*
* Returns a boolean value indicating whether the operation succeeded.
*
* Emits a {Transfer} event.
*/
function transfer(address to, uint256 value) 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 a `value` amount of tokens 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 value) external returns (bool);
/**
* @dev Moves a `value` amount of tokens from `from` to `to` using the
* allowance mechanism. `value` is then deducted from the caller's
* allowance.
*
* Returns a boolean value indicating whether the operation succeeded.
*
* Emits a {Transfer} event.
*/
function transferFrom(address from, address to, uint256 value) external returns (bool);
}// SPDX-License-Identifier: MIT
pragma solidity 0.8.26;
interface IAggregatorExecutor {
function executeSwap(bytes calldata swapData) external payable;
}{
"optimizer": {
"enabled": true,
"runs": 1000000
},
"evmVersion": "paris",
"outputSelection": {
"*": {
"*": [
"evm.bytecode",
"evm.deployedBytecode",
"devdoc",
"userdoc",
"metadata",
"abi"
]
}
}
}Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
Contract ABI
API[{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint16","name":"id","type":"uint16"},{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":false,"internalType":"address","name":"tokenIn","type":"address"},{"indexed":false,"internalType":"address","name":"tokenOut","type":"address"},{"indexed":false,"internalType":"address","name":"executor","type":"address"},{"indexed":false,"internalType":"uint256","name":"amountIn","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amountOut","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"minAmountOut","type":"uint256"}],"name":"AggregatedTrade","type":"event"},{"stateMutability":"payable","type":"fallback"},{"inputs":[],"name":"IceCreamSwap","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"payable","type":"function"},{"stateMutability":"payable","type":"receive"}]Contract Creation Code
6080604052348015600f57600080fd5b5061073c8061001f6000396000f3fe60806040526004361061001f5760003560e01c80633f0bde251461002857005b3661002657005b005b610030610042565b60405190815260200160405180910390f35b600060043560f01c600635606090811c90601a35608090811c91602a3590911c90603b35811c90604f35811c90606335811c90607735901c73eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee8214610164576fffffffffffffffffffffffffffffffff86161561015f576040517f23b872dd00000000000000000000000000000000000000000000000000000000815233600482015273ffffffffffffffffffffffffffffffffffffffff85811660248301526fffffffffffffffffffffffffffffffff881660448301528316906323b872dd906064016020604051808303816000875af1158015610139573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061015d919061060d565b505b61029f565b34866fffffffffffffffffffffffffffffffff16146101e4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600f60248201527f696e636f72726563742076616c7565000000000000000000000000000000000060448201526064015b60405180910390fd5b8673ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161461029f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602160248201527f4e6174697665207265636569766572206d75737420626565206578656375746f60448201527f720000000000000000000000000000000000000000000000000000000000000060648201526084016101db565b600073ffffffffffffffffffffffffffffffffffffffff821673eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee14610367576040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff85811660048301528316906370a0823190602401602060405180830381865afa15801561033e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103629190610636565b610380565b8373ffffffffffffffffffffffffffffffffffffffff16315b905073ffffffffffffffffffffffffffffffffffffffff881663985f61a1346103ad36601a81600061064f565b6040518463ffffffff1660e01b81526004016103ca929190610679565b6000604051808303818588803b1580156103e357600080fd5b505af11580156103f7573d6000803e3d6000fd5b506000935050505073ffffffffffffffffffffffffffffffffffffffff831673eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee146104d4576040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff86811660048301528391908516906370a0823190602401602060405180830381865afa15801561049f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104c39190610636565b6104cd91906106c6565b90506104f8565b6104f58273ffffffffffffffffffffffffffffffffffffffff8716316106c6565b90505b866fffffffffffffffffffffffffffffffff16811015610574576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601360248201527f496e73756666696369656e74206f75747075740000000000000000000000000060448201526064016101db565b6040805173ffffffffffffffffffffffffffffffffffffffff868116825285811660208301528b8116828401526fffffffffffffffffffffffffffffffff8b81166060840152608083018590528a1660a083015291519187169161ffff8d16917f97d8fe5395a5423bef64e2004851e9b3f60f7848835afa581b4a0a8e84bc662d919081900360c00190a39a9950505050505050505050565b60006020828403121561061f57600080fd5b8151801515811461062f57600080fd5b9392505050565b60006020828403121561064857600080fd5b5051919050565b6000808585111561065f57600080fd5b8386111561066c57600080fd5b5050820193919092039150565b60208152816020820152818360408301376000818301604090810191909152601f9092017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0160101919050565b81810381811115610700577f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b9291505056fea2646970667358221220a1386a0c862a65e8643b01e497fb068b838ffb9753954316c523d7771ded15b364736f6c634300081a0033
Deployed Bytecode
0x60806040526004361061001f5760003560e01c80633f0bde251461002857005b3661002657005b005b610030610042565b60405190815260200160405180910390f35b600060043560f01c600635606090811c90601a35608090811c91602a3590911c90603b35811c90604f35811c90606335811c90607735901c73eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee8214610164576fffffffffffffffffffffffffffffffff86161561015f576040517f23b872dd00000000000000000000000000000000000000000000000000000000815233600482015273ffffffffffffffffffffffffffffffffffffffff85811660248301526fffffffffffffffffffffffffffffffff881660448301528316906323b872dd906064016020604051808303816000875af1158015610139573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061015d919061060d565b505b61029f565b34866fffffffffffffffffffffffffffffffff16146101e4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600f60248201527f696e636f72726563742076616c7565000000000000000000000000000000000060448201526064015b60405180910390fd5b8673ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161461029f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602160248201527f4e6174697665207265636569766572206d75737420626565206578656375746f60448201527f720000000000000000000000000000000000000000000000000000000000000060648201526084016101db565b600073ffffffffffffffffffffffffffffffffffffffff821673eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee14610367576040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff85811660048301528316906370a0823190602401602060405180830381865afa15801561033e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103629190610636565b610380565b8373ffffffffffffffffffffffffffffffffffffffff16315b905073ffffffffffffffffffffffffffffffffffffffff881663985f61a1346103ad36601a81600061064f565b6040518463ffffffff1660e01b81526004016103ca929190610679565b6000604051808303818588803b1580156103e357600080fd5b505af11580156103f7573d6000803e3d6000fd5b506000935050505073ffffffffffffffffffffffffffffffffffffffff831673eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee146104d4576040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff86811660048301528391908516906370a0823190602401602060405180830381865afa15801561049f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104c39190610636565b6104cd91906106c6565b90506104f8565b6104f58273ffffffffffffffffffffffffffffffffffffffff8716316106c6565b90505b866fffffffffffffffffffffffffffffffff16811015610574576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601360248201527f496e73756666696369656e74206f75747075740000000000000000000000000060448201526064016101db565b6040805173ffffffffffffffffffffffffffffffffffffffff868116825285811660208301528b8116828401526fffffffffffffffffffffffffffffffff8b81166060840152608083018590528a1660a083015291519187169161ffff8d16917f97d8fe5395a5423bef64e2004851e9b3f60f7848835afa581b4a0a8e84bc662d919081900360c00190a39a9950505050505050505050565b60006020828403121561061f57600080fd5b8151801515811461062f57600080fd5b9392505050565b60006020828403121561064857600080fd5b5051919050565b6000808585111561065f57600080fd5b8386111561066c57600080fd5b5050820193919092039150565b60208152816020820152818360408301376000818301604090810191909152601f9092017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0160101919050565b81810381811115610700577f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b9291505056fea2646970667358221220a1386a0c862a65e8643b01e497fb068b838ffb9753954316c523d7771ded15b364736f6c634300081a0033
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 34 Chains
| Chain | Token | Portfolio % | Price | Amount | Value |
|---|---|---|---|---|---|
| BASE | 100.00% | $3,195.97 | 0.000001 | $0.003196 |
Loading...
Loading
Loading...
Loading
Loading...
Loading
[ 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.