Transaction Hash:
Block:
20912257 at Oct-07-2024 07:42:11 AM +UTC
Transaction Fee:
0.001371284361661616 ETH
$6.44
Gas Used:
227,476 Gas / 6.028259516 Gwei
Emitted Events:
544 |
ERC20.Transfer( from=[Sender] 0x9f18ab9cd47fe447437208471e8f216d698087e5, to=ERC20Router, value=201044647514623685042 )
|
545 |
ERC20.Approval( owner=[Sender] 0x9f18ab9cd47fe447437208471e8f216d698087e5, spender=[Receiver] ApprovalProxy, value=0 )
|
546 |
ERC20.Approval( owner=ERC20Router, spender=ZeroEx, value=201044647514623685042 )
|
547 |
ERC20.Transfer( from=ERC20Router, to=UniswapV2Pair, value=201044647514623685042 )
|
548 |
ERC20.Approval( owner=ERC20Router, spender=ZeroEx, value=0 )
|
549 |
FiatTokenProxy.0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef( 0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef, 0x000000000000000000000000c88ac988a655b91b70def427c8778b4d43f2048d, 0x000000000000000000000000b4e16d0168e52d35cacd2c6185b44281ec28c9dc, 0000000000000000000000000000000000000000000000000000000001de0e49 )
|
550 |
UniswapV2Pair.Sync( reserve0=704893259839497982377361, reserve1=110146407134 )
|
551 |
UniswapV2Pair.Swap( sender=ZeroEx, amount0In=201044647514623685042, amount1In=0, amount0Out=0, amount1Out=31329865, to=UniswapV2Pair )
|
552 |
WETH9.Transfer( src=UniswapV2Pair, dst=ZeroEx, wad=12568796517232243 )
|
553 |
UniswapV2Pair.Sync( reserve0=43670612883210, reserve1=17572315365470042547592 )
|
554 |
UniswapV2Pair.Swap( sender=ZeroEx, amount0In=31329865, amount1In=0, amount0Out=0, amount1Out=12568796517232243, to=ZeroEx )
|
555 |
WETH9.Withdrawal( src=ZeroEx, wad=12568796517232243 )
|
Account State Difference:
Address | Before | After | State Difference | ||
---|---|---|---|---|---|
0x4838B106...B0BAD5f97
Miner
| (Titan Builder) | 8.278506061093084337 Eth | 8.278517434893084337 Eth | 0.0000113738 | |
0x9F18ab9c...d698087e5 |
0.070713189739287301 Eth
Nonce: 297
|
0.069341905377625685 Eth
Nonce: 298
| 0.001371284361661616 | ||
0x9fa69536...5B505a9aE | |||||
0xA0b86991...E3606eB48 | |||||
0xB4e16d01...1Ec28C9Dc | |||||
0xC02aaA39...83C756Cc2 | 2,973,327.867005804236245066 Eth | 2,973,327.854437007719012823 Eth | 0.012568796517232243 | ||
0xc88aC988...D43f2048D | |||||
0xf70da978...8dfA3dbEF | (Relay: Solver) | 332.801247749865140048 Eth | 332.813816546382372291 Eth | 0.012568796517232243 |
Execution Trace
ApprovalProxy.transferAndMulticall( tokens=[0x9fa69536d1cda4A04cFB50688294de75B505a9aE], amounts=[201044647514623685042], targets=[0x9fa69536d1cda4A04cFB50688294de75B505a9aE, 0xDef1C0ded9bec7F1a1670819833240f027b25EfF], datas=[CV6nswAAAAAAAAAAAAAAAN7xwN7ZvsfxoWcIGYMyQPAnsl7/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK5g4Ru/7DsbI=, 2WJ6pAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK5g4Ru/7DsbIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAALDTw+SWsEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMAAAAAAAAAAAAAAACfppU20c2koEz7UGiClN51tQWprgAAAAAAAAAAAAAAAKC4aZHGIYs2wdGdSi6esM42ButIAAAAAAAAAAAAAAAA7u7u7u7u7u7u7u7u7u7u7u7u7u6GlYTNAAAAAAAAAAAAAAAAlNMlprMa57t49D+5faQ3wcP0L5YAAAAAAAAAAAAAAAAAAAAAAAAAAIW1khVor7IvuDVmhA==], values=[0, 0], refundTo=0xf70da97812CB96acDF810712Aa562db8dfA3dbEF ) => ( 0x0000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000002CA740FBA9EE73 )
-
ERC20.transferFrom( sender=0x9F18ab9cd47FE447437208471e8f216d698087e5, recipient=0xA1BEa5fe917450041748Dbbbe7E9AC57A4bBEBaB, amount=201044647514623685042 ) => ( True )
ERC20Router.delegatecallMulticall( targets=[0x9fa69536d1cda4A04cFB50688294de75B505a9aE, 0xDef1C0ded9bec7F1a1670819833240f027b25EfF], datas=[CV6nswAAAAAAAAAAAAAAAN7xwN7ZvsfxoWcIGYMyQPAnsl7/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK5g4Ru/7DsbI=, 2WJ6pAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK5g4Ru/7DsbIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAALDTw+SWsEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMAAAAAAAAAAAAAAACfppU20c2koEz7UGiClN51tQWprgAAAAAAAAAAAAAAAKC4aZHGIYs2wdGdSi6esM42ButIAAAAAAAAAAAAAAAA7u7u7u7u7u7u7u7u7u7u7u7u7u6GlYTNAAAAAAAAAAAAAAAAlNMlprMa57t49D+5faQ3wcP0L5YAAAAAAAAAAAAAAAAAAAAAAAAAAIW1khVor7IvuDVmhA==], values=[0, 0], refundTo=0xf70da97812CB96acDF810712Aa562db8dfA3dbEF ) => ( 0x0000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000002CA740FBA9EE73 )
Multicaller.aggregate( targets=[0x9fa69536d1cda4A04cFB50688294de75B505a9aE, 0xDef1C0ded9bec7F1a1670819833240f027b25EfF], data=[CV6nswAAAAAAAAAAAAAAAN7xwN7ZvsfxoWcIGYMyQPAnsl7/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK5g4Ru/7DsbI=, 2WJ6pAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK5g4Ru/7DsbIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAALDTw+SWsEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMAAAAAAAAAAAAAAACfppU20c2koEz7UGiClN51tQWprgAAAAAAAAAAAAAAAKC4aZHGIYs2wdGdSi6esM42ButIAAAAAAAAAAAAAAAA7u7u7u7u7u7u7u7u7u7u7u7u7u6GlYTNAAAAAAAAAAAAAAAAlNMlprMa57t49D+5faQ3wcP0L5YAAAAAAAAAAAAAAAAAAAAAAAAAAIW1khVor7IvuDVmhA==], values=[0, 0], refundTo=0xf70da97812CB96acDF810712Aa562db8dfA3dbEF ) => ( [AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAE=, AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACynQPup7nM=] )
-
ERC20.approve( spender=0xDef1C0ded9bec7F1a1670819833240f027b25EfF, amount=201044647514623685042 ) => ( True )
ZeroEx.d9627aa4( )
UniswapFeature.sellToUniswap( tokens=[0x9fa69536d1cda4A04cFB50688294de75B505a9aE, 0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48, 0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE], sellAmount=201044647514623685042, minBuyAmount=12443108552059920, isSushi=False ) => ( buyAmount=12568796517232243 )
-
ERC20.transferFrom( sender=0xA1BEa5fe917450041748Dbbbe7E9AC57A4bBEBaB, recipient=0xc88aC988A655B91b70DEF427c8778B4D43f2048D, amount=201044647514623685042 ) => ( True )
-
UniswapV2Pair.STATICCALL( )
-
UniswapV2Pair.STATICCALL( )
UniswapV2Pair.swap( amount0Out=0, amount1Out=12568796517232243, to=0xDef1C0ded9bec7F1a1670819833240f027b25EfF, data=0x )
-
WETH9.transfer( dst=0xDef1C0ded9bec7F1a1670819833240f027b25EfF, wad=12568796517232243 ) => ( True )
-
FiatTokenProxy.70a08231( )
-
WETH9.balanceOf( 0xB4e16d0168e52d35CaCD2c6185b44281Ec28C9Dc ) => ( 17572315365470042547592 )
-
WETH9.withdraw( wad=12568796517232243 )
- ETH 0.012568796517232243
ZeroEx.CALL( )
- ETH 0.012568796517232243
- ETH 0.012568796517232243
ERC20Router.CALL( )
-
- ETH 0.012568796517232243
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 10: ApprovalProxy
File 2 of 10: ERC20Router
File 3 of 10: ERC20
File 4 of 10: UniswapV2Pair
File 5 of 10: FiatTokenProxy
File 6 of 10: UniswapV2Pair
File 7 of 10: ZeroEx
File 8 of 10: WETH9
File 9 of 10: Multicaller
File 10 of 10: UniswapFeature
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 10: 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 3 of 10: ERC20
12345678910111213141516// SPDX-License-Identifier: MITpragma solidity ^0.8.0;abstract contract Context {function _msgSender() internal view virtual returns (address) {return msg.sender;}function _msgData() internal view virtual returns (bytes calldata) {return msg.data;}}abstract contract Ownable is Context {address private _owner;
File 4 of 10: UniswapV2Pair
12345678910111213141516// File: contracts/interfaces/IUniswapV2Pair.solpragma solidity >=0.5.0;interface IUniswapV2Pair {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 5 of 10: FiatTokenProxy
12345678910111213141516pragma solidity ^0.4.24;// File: zos-lib/contracts/upgradeability/Proxy.sol/*** @title Proxy* @dev Implements delegation of calls to other contracts, with proper* forwarding of return values and bubbling of failures.* It defines a fallback function that delegates all calls to the address* returned by the abstract _implementation() internal function.*/contract Proxy {/*** @dev Fallback function.* Implemented entirely in `_fallback`.*/
File 6 of 10: UniswapV2Pair
12345678910111213141516// File: contracts/interfaces/IUniswapV2Pair.solpragma solidity >=0.5.0;interface IUniswapV2Pair {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 7 of 10: ZeroEx
12345678910111213141516/*Copyright 2020 ZeroEx Intl.Licensed under the Apache License, Version 2.0 (the "License");you may not use this file except in compliance with the License.You may obtain a copy of the License athttp://www.apache.org/licenses/LICENSE-2.0Unless required by applicable law or agreed to in writing, softwaredistributed under the License is distributed on an "AS IS" BASIS,WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.See the License for the specific language governing permissions andlimitations under the License.*/pragma solidity ^0.6.5;pragma experimental ABIEncoderV2;import "@0x/contracts-utils/contracts/src/v06/LibBytesV06.sol";import "./migrations/LibBootstrap.sol";
File 8 of 10: 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 9 of 10: 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 10 of 10: UniswapFeature
12345678910111213141516// SPDX-License-Identifier: Apache-2.0/*Copyright 2020 ZeroEx Intl.Licensed under the Apache License, Version 2.0 (the "License");you may not use this file except in compliance with the License.You may obtain a copy of the License athttp://www.apache.org/licenses/LICENSE-2.0Unless required by applicable law or agreed to in writing, softwaredistributed under the License is distributed on an "AS IS" BASIS,WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.See the License for the specific language governing permissions andlimitations under the License.*/pragma solidity ^0.6.5;pragma experimental ABIEncoderV2;import "@0x/contracts-erc20/contracts/src/v06/IERC20TokenV06.sol";