Transaction Hash:
Block:
21973157 at Mar-04-2025 11:14:11 AM +UTC
Transaction Fee:
0.000351095570651072 ETH
$1.21
Gas Used:
269,672 Gas / 1.301935576 Gwei
Emitted Events:
433 |
GaspToken.Approval( owner=[Sender] 0xb80c35fd5164b6ff6278ab0e328d9872a78e7e31, spender=[Receiver] ApprovalProxy, value=0 )
|
434 |
GaspToken.Transfer( from=[Sender] 0xb80c35fd5164b6ff6278ab0e328d9872a78e7e31, to=ERC20Router, value=210215643014631815463 )
|
435 |
GaspToken.Approval( owner=ERC20Router, spender=0x85CD07Ea01423b1E937929B44E4Ad8c40BbB5E71, value=210215643014631815463 )
|
436 |
GaspToken.Approval( owner=ERC20Router, spender=0x85CD07Ea01423b1E937929B44E4Ad8c40BbB5E71, value=0 )
|
437 |
GaspToken.Transfer( from=ERC20Router, to=0x85CD07Ea01423b1E937929B44E4Ad8c40BbB5E71, value=210215643014631815463 )
|
438 |
TetherToken.Transfer( from=UniswapV3Pool, to=CroDefiSwapPair, value=8037796 )
|
439 |
GaspToken.Transfer( from=0x85CD07Ea01423b1E937929B44E4Ad8c40BbB5E71, to=UniswapV3Pool, value=210215643014631815463 )
|
440 |
UniswapV3Pool.Swap( sender=0x85CD07Ea01423b1E937929B44E4Ad8c40BbB5E71, recipient=CroDefiSwapPair, amount0=210215643014631815463, amount1=-8037796, sqrtPriceX96=15515231737378298068397, liquidity=916363675858026505, tick=-308936 )
|
441 |
WETH9.Transfer( src=CroDefiSwapPair, dst=0x85CD07Ea01423b1E937929B44E4Ad8c40BbB5E71, wad=3809561058587947 )
|
442 |
CroDefiSwapPair.Sync( reserve0=14123304019666741329, reserve1=29717412211 )
|
443 |
CroDefiSwapPair.Swap( sender=0x85CD07Ea01423b1E937929B44E4Ad8c40BbB5E71, amount0In=0, amount1In=8037796, amount0Out=3809561058587947, amount1Out=0, to=0x85CD07Ea01423b1E937929B44E4Ad8c40BbB5E71 )
|
444 |
WETH9.Withdrawal( src=0x85CD07Ea01423b1E937929B44E4Ad8c40BbB5E71, wad=3809561058587947 )
|
445 |
0x85cd07ea01423b1e937929b44e4ad8c40bbb5e71.0x1bf1122521093cffed0b7f29833cd231d885bae58dceb074e411a1fbd94824bd( 0x1bf1122521093cffed0b7f29833cd231d885bae58dceb074e411a1fbd94824bd, 0x000000000000000000000000a1bea5fe917450041748dbbbe7e9ac57a4bbebab, 0x000000000000000000000000736ecc5237b31edec6f1ab9a396fae2416b1d96e, 0x0000000000000000000000000000000000000000000000000000000000000000, 000000000000000000000000a1bea5fe917450041748dbbbe7e9ac57a4bbebab, 000000000000000000000000eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee, 00000000000000000000000000000000000000000000000b6553fd8d35747927, 000000000000000000000000000000000000000000000000000d4d12bd3f9cff, 000000000000000000000000000000000000000000000000000d88c68da5b52b, fffffffffffffffffffffffffffffffffffffffffffffffffffff6360b3b0011 )
|
Account State Difference:
Address | Before | After | State Difference | ||
---|---|---|---|---|---|
0x2c21D8Fe...a9b816128 | (Uniswap V3: GASP-USDT) | ||||
0x4838B106...B0BAD5f97
Miner
| (Titan Builder) | 7.056904901207798332 Eth | 7.056905170879798332 Eth | 0.000000269672 | |
0x736ECc52...416b1d96E | |||||
0x74C99F3f...FC029a83E | |||||
0xB80C35FD...2A78e7E31 |
0.000980636138109191 Eth
Nonce: 20
|
0.000629540567458119 Eth
Nonce: 21
| 0.000351095570651072 | ||
0xC02aaA39...83C756Cc2 | 2,860,450.697785709975353428 Eth | 2,860,450.693976148916765481 Eth | 0.003809561058587947 | ||
0xdAC17F95...13D831ec7 | |||||
0xf70da978...8dfA3dbEF | (Relay: Solver) | 434.960715146795333194 Eth | 434.964524707853921141 Eth | 0.003809561058587947 |
Execution Trace
ApprovalProxy.transferAndMulticall( tokens=[0x736ECc5237B31eDec6f1aB9a396FaE2416b1d96E], amounts=[210215643014631815463], targets=[0x736ECc5237B31eDec6f1aB9a396FaE2416b1d96E, 0x85CD07Ea01423b1E937929B44E4Ad8c40BbB5E71], datas=[CV6nswAAAAAAAAAAAAAAAIXNB+oBQjsek3kptE5K2MQLu15xAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAALZVP9jTV0eSc=, 3ZxflgAAAAAAAAAAAAAAAHNuzFI3sx7exvGrmjlvriQWsdluAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAALZVP9jTV0eScAAAAAAAAAAAAAAADu7u7u7u7u7u7u7u7u7u7u7u7u7gAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANkpCCarUaAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA1NEr0/nP8AAAAAAAAAAAAAAAChvqX+kXRQBBdI27vn6axXpLvrqwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAswJzbsxSN7Me3sbxq5o5b64kFrHZbgH//wEsIdj+Kc2/bJj/Y4rFC1Ham4FhKAF0yZ8/UzFnb2rsJ1bh85tPwCmoPgAE2sF/lY0u5SOiIGIGmUWXwT2DHscAdMmfP1MxZ29q7CdW4fObT8ApqD4Ahc0H6gFCOx6TeSm0TkrYxAu7XnEAC7gBwCqqObIj/o0KDlxPJ+rZCDx1bMIB//8CAIXNB+oBQjsek3kptE5K2MQLu15xAAAAAAAAAAAAAAAAAA==], values=[0, 0], refundTo=0xf70da97812CB96acDF810712Aa562db8dfA3dbEF ) => ( 0x0000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000D88C68DA5B52B )
-
GaspToken.transferFrom( owner=0xB80C35FD5164B6ff6278ab0e328d9872A78e7E31, recipient=0xA1BEa5fe917450041748Dbbbe7E9AC57A4bBEBaB, amount=210215643014631815463 ) => ( True )
ERC20Router.delegatecallMulticall( targets=[0x736ECc5237B31eDec6f1aB9a396FaE2416b1d96E, 0x85CD07Ea01423b1E937929B44E4Ad8c40BbB5E71], datas=[CV6nswAAAAAAAAAAAAAAAIXNB+oBQjsek3kptE5K2MQLu15xAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAALZVP9jTV0eSc=, 3ZxflgAAAAAAAAAAAAAAAHNuzFI3sx7exvGrmjlvriQWsdluAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAALZVP9jTV0eScAAAAAAAAAAAAAAADu7u7u7u7u7u7u7u7u7u7u7u7u7gAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANkpCCarUaAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA1NEr0/nP8AAAAAAAAAAAAAAAChvqX+kXRQBBdI27vn6axXpLvrqwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAswJzbsxSN7Me3sbxq5o5b64kFrHZbgH//wEsIdj+Kc2/bJj/Y4rFC1Ham4FhKAF0yZ8/UzFnb2rsJ1bh85tPwCmoPgAE2sF/lY0u5SOiIGIGmUWXwT2DHscAdMmfP1MxZ29q7CdW4fObT8ApqD4Ahc0H6gFCOx6TeSm0TkrYxAu7XnEAC7gBwCqqObIj/o0KDlxPJ+rZCDx1bMIB//8CAIXNB+oBQjsek3kptE5K2MQLu15xAAAAAAAAAAAAAAAAAA==], values=[0, 0], refundTo=0xf70da97812CB96acDF810712Aa562db8dfA3dbEF ) => ( 0x0000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000D88C68DA5B52B )
Multicaller.aggregate( targets=[0x736ECc5237B31eDec6f1aB9a396FaE2416b1d96E, 0x85CD07Ea01423b1E937929B44E4Ad8c40BbB5E71], data=[CV6nswAAAAAAAAAAAAAAAIXNB+oBQjsek3kptE5K2MQLu15xAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAALZVP9jTV0eSc=, 3ZxflgAAAAAAAAAAAAAAAHNuzFI3sx7exvGrmjlvriQWsdluAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAALZVP9jTV0eScAAAAAAAAAAAAAAADu7u7u7u7u7u7u7u7u7u7u7u7u7gAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANkpCCarUaAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA1NEr0/nP8AAAAAAAAAAAAAAAChvqX+kXRQBBdI27vn6axXpLvrqwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAswJzbsxSN7Me3sbxq5o5b64kFrHZbgH//wEsIdj+Kc2/bJj/Y4rFC1Ham4FhKAF0yZ8/UzFnb2rsJ1bh85tPwCmoPgAE2sF/lY0u5SOiIGIGmUWXwT2DHscAdMmfP1MxZ29q7CdW4fObT8ApqD4Ahc0H6gFCOx6TeSm0TkrYxAu7XnEAC7gBwCqqObIj/o0KDlxPJ+rZCDx1bMIB//8CAIXNB+oBQjsek3kptE5K2MQLu15xAAAAAAAAAAAAAAAAAA==], values=[0, 0], refundTo=0xf70da97812CB96acDF810712Aa562db8dfA3dbEF ) => ( [AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAE=, AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA2Ixo2ltSs=] )
-
GaspToken.approve( spender=0x85CD07Ea01423b1E937929B44E4Ad8c40BbB5E71, amount=210215643014631815463 ) => ( True )
0x85cd07ea01423b1e937929b44e4ad8c40bbb5e71.dd9c5f96( )
-
GaspToken.balanceOf( account=0xA1BEa5fe917450041748Dbbbe7E9AC57A4bBEBaB ) => ( 210215643014631815463 )
-
GaspToken.transferFrom( owner=0xA1BEa5fe917450041748Dbbbe7E9AC57A4bBEBaB, recipient=0x85CD07Ea01423b1E937929B44E4Ad8c40BbB5E71, amount=210215643014631815463 ) => ( True )
UniswapV3Pool.swap( recipient=0x74C99F3f5331676f6AEc2756e1F39b4FC029a83E, zeroForOne=True, amountSpecified=210215643014631815463, sqrtPriceLimitX96=4295128740, data=0x000000000000000000000000736ECC5237B31EDEC6F1AB9A396FAE2416B1D96E0000000000000000000000000000000000000000000000000000000000000000 ) => ( amount0=210215643014631815463, amount1=-8037796 )
-
TetherToken.transfer( _to=0x74C99F3f5331676f6AEc2756e1F39b4FC029a83E, _value=8037796 )
-
GaspToken.balanceOf( account=0x2c21D8Fe29cdbf6C98Ff638Ac50b51Da9b816128 ) => ( 7103649792912065047907210 )
0x85cd07ea01423b1e937929b44e4ad8c40bbb5e71.fa461e33( )
-
GaspToken.transfer( recipient=0x2c21D8Fe29cdbf6C98Ff638Ac50b51Da9b816128, amount=210215643014631815463 ) => ( True )
-
-
GaspToken.balanceOf( account=0x2c21D8Fe29cdbf6C98Ff638Ac50b51Da9b816128 ) => ( 7103860008555079679722673 )
-
-
CroDefiSwapPair.STATICCALL( )
-
TetherToken.balanceOf( who=0x74C99F3f5331676f6AEc2756e1F39b4FC029a83E ) => ( 29717412211 )
CroDefiSwapPair.swap( amount0Out=3809561058587947, amount1Out=0, to=0x85CD07Ea01423b1E937929B44E4Ad8c40BbB5E71, data=0x )
-
WETH9.transfer( dst=0x85CD07Ea01423b1E937929B44E4Ad8c40BbB5E71, wad=3809561058587947 ) => ( True )
-
WETH9.balanceOf( 0x74C99F3f5331676f6AEc2756e1F39b4FC029a83E ) => ( 14123304019666741329 )
-
TetherToken.balanceOf( who=0x74C99F3f5331676f6AEc2756e1F39b4FC029a83E ) => ( 29717412211 )
-
CroDefiSwapFactory.STATICCALL( )
-
-
WETH9.balanceOf( 0x85CD07Ea01423b1E937929B44E4Ad8c40BbB5E71 ) => ( 3809561058587948 )
WETH9.withdraw( wad=3809561058587947 )
- ETH 0.003809561058587947
0x85cd07ea01423b1e937929b44e4ad8c40bbb5e71.CALL( )
- ETH 0.003809561058587947
- ETH 0.003809561058587947
0x85cd07ea01423b1e937929b44e4ad8c40bbb5e71.CALL( )
-
GaspToken.balanceOf( account=0xA1BEa5fe917450041748Dbbbe7E9AC57A4bBEBaB ) => ( 0 )
- ETH 0.003809561058587947
ERC20Router.CALL( )
-
- ETH 0.003809561058587947
Relay: Solver.CALL( )
-
transferAndMulticall[ApprovalProxy (ln:37)]
ArrayLengthsMismatch[ApprovalProxy (ln:47)]
ArrayLengthsMismatch[ApprovalProxy (ln:51)]
safeTransferFrom[ApprovalProxy (ln:55)]
delegatecallMulticall[ApprovalProxy (ln:60)]
File 1 of 9: ApprovalProxy
File 2 of 9: GaspToken
File 3 of 9: ERC20Router
File 4 of 9: UniswapV3Pool
File 5 of 9: CroDefiSwapPair
File 6 of 9: TetherToken
File 7 of 9: WETH9
File 8 of 9: Multicaller
File 9 of 9: CroDefiSwapFactory
12345678910111213141516// SPDX-License-Identifier: MITpragma solidity ^0.8.23;import {Ownable} from "solady/src/auth/Ownable.sol";import {IERC20} from "@openzeppelin/contracts/token/ERC20/IERC20.sol";import {SafeERC20} from "@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol";import {IERC20Router} from "../src/types/interfaces/IERC20Router.sol";contract ApprovalProxy is Ownable {using SafeERC20 for IERC20;error ArrayLengthsMismatch();error ERC20TransferFromFailed();error NativeTransferFailed();event RouterUpdated(address newRouter);address public router;receive() external payable {}constructor(address _owner, address _router) {_initializeOwner(_owner);
File 2 of 9: GaspToken
12345678910111213141516// SPDX-License-Identifier: BUSL-1.1pragma solidity 0.8.13;import {Ownable} from "@openzeppelin/contracts/access/Ownable.sol";import {ERC20} from "@openzeppelin/contracts/token/ERC20/ERC20.sol";import {IERC20} from "@openzeppelin/contracts/token/ERC20/IERC20.sol";import {Context} from "@openzeppelin/contracts/utils/Context.sol";import {IGaspToken} from "./interfaces/IGaspToken.sol";contract GaspToken is Context, Ownable, ERC20, IGaspToken {uint256 private constant _TOTAL_SUPPLY = 1_000_000_000 * 10 ** 18;string private constant _NAME = "GASP";string private constant _SYMBOL = "GASP";mapping(address => bool) public override senderWhitelist;mapping(address => bool) public override recipientWhitelist;bool public override allowTransfers;modifier isWhitelisted(address sender, address recipient, bytes4 selector) {if (!allowTransfers && !senderWhitelist[sender] && !recipientWhitelist[recipient]) {
File 3 of 9: ERC20Router
12345678910111213141516// SPDX-License-Identifier: MITpragma solidity ^0.8.25;import {Ownable} from "solady/src/auth/Ownable.sol";import {Tstorish} from "tstorish/src/Tstorish.sol";import {IERC20} from "@openzeppelin/contracts/token/ERC20/IERC20.sol";import {IERC721} from "@openzeppelin/contracts/token/ERC721/IERC721.sol";import {IERC1155} from "@openzeppelin/contracts/token/ERC1155/IERC1155.sol";import {SafeERC20} from "@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol";import {IAllowanceTransfer} from "permit2-relay/src/interfaces/IAllowanceTransfer.sol";import {ISignatureTransfer} from "permit2-relay/src/interfaces/ISignatureTransfer.sol";import {IPermit2} from "permit2-relay/src/interfaces/IPermit2.sol";import {RelayerWitness} from "./types/lib/RelayStructs.sol";import {IMulticaller} from "./types/interfaces/IMulticaller.sol";contract ERC20Router is Ownable, Tstorish {using SafeERC20 for IERC20;// --- Errors --- //
File 4 of 9: UniswapV3Pool
12345678910111213141516// SPDX-License-Identifier: BUSL-1.1pragma solidity =0.7.6;import './interfaces/IUniswapV3Pool.sol';import './NoDelegateCall.sol';import './libraries/LowGasSafeMath.sol';import './libraries/SafeCast.sol';import './libraries/Tick.sol';import './libraries/TickBitmap.sol';import './libraries/Position.sol';import './libraries/Oracle.sol';import './libraries/FullMath.sol';import './libraries/FixedPoint128.sol';import './libraries/TransferHelper.sol';import './libraries/TickMath.sol';import './libraries/LiquidityMath.sol';import './libraries/SqrtPriceMath.sol';
File 5 of 9: CroDefiSwapPair
12345678910111213141516// File: contracts/interfaces/ICroDefiSwapPair.solpragma solidity >=0.5.0;interface ICroDefiSwapPair {event Approval(address indexed owner, address indexed spender, uint value);event Transfer(address indexed from, address indexed to, uint value);function name() external pure returns (string memory);function symbol() external pure returns (string memory);function decimals() external pure returns (uint8);function totalSupply() external view returns (uint);function balanceOf(address owner) external view returns (uint);function allowance(address owner, address spender) external view returns (uint);function approve(address spender, uint value) external returns (bool);
File 6 of 9: TetherToken
12345678910111213141516pragma solidity ^0.4.17;/*** @title SafeMath* @dev Math operations with safety checks that throw on error*/library SafeMath {function mul(uint256 a, uint256 b) internal pure returns (uint256) {if (a == 0) {return 0;}uint256 c = a * b;assert(c / a == b);return c;}
File 7 of 9: WETH9
12345678910111213141516// Copyright (C) 2015, 2016, 2017 Dapphub// This program is free software: you can redistribute it and/or modify// it under the terms of the GNU General Public License as published by// the Free Software Foundation, either version 3 of the License, or// (at your option) any later version.// This program is distributed in the hope that it will be useful,// but WITHOUT ANY WARRANTY; without even the implied warranty of// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the// GNU General Public License for more details.// You should have received a copy of the GNU General Public License// along with this program. If not, see <http://www.gnu.org/licenses/>.pragma solidity ^0.4.18;
File 8 of 9: Multicaller
12345678910111213141516// SPDX-License-Identifier: MITpragma solidity ^0.8.4;/*** @title Multicaller* @author vectorized.eth* @notice Contract that allows for efficient aggregation* of multiple calls in a single transaction.*/contract Multicaller {// =============================================================// ERRORS// =============================================================/*** @dev The lengths of the input arrays are not the same.*/error ArrayLengthsMismatch();
File 9 of 9: CroDefiSwapFactory
12345678910111213141516// File: contracts/interfaces/ICroDefiSwapFactory.solpragma solidity >=0.5.0;interface ICroDefiSwapFactory {event PairCreated(address indexed token0, address indexed token1, address pair, uint);event FeeSetterUpdated(address latestFeeSetter, address previousFeeSetter);event FeeToUpdated(address latestFeeTo, address previousFeeTo);event FeeToBasisPointUpdated(uint latestFeeToBasisPoint, uint previousFeeToBasisPoint);event TotalFeeBasisPointUpdated(uint latestTotalFeeBasisPoint, uint previousTotalFeeBasisPoint);function feeTo() external view returns (address);function feeToBasisPoint() external view returns (uint);// technically must be bigger than or equal to feeToBasisPointfunction totalFeeBasisPoint() external view returns (uint);