ETH Price: $2,818.48 (+1.63%)
Gas: 2.31 Gwei

Transaction Decoder

Block:
21002233 at Oct-19-2024 09:13:47 PM +UTC
Transaction Fee:
0.002750163665528892 ETH $7.75
Gas Used:
304,323 Gas / 9.036989204 Gwei

Account State Difference:

  Address   Before After State Difference Code
(Titan Builder)
11.281013053086413325 Eth11.281305294463313325 Eth0.0002922413769
0x5849Df6c...7195d3d04
0.097638285278277102 Eth
Nonce: 355
0.09488812161274821 Eth
Nonce: 356
0.002750163665528892

Execution Trace

ETH 0.050109611304940061 UTB.bridgeAndExecute( instructions=[{name:preBridge, type:tuple, order:1, indexed:false, value:[{name:swapperId, type:uint8, order:1, indexed:false, value:0, valueString:0}, {name:swapParams, type:tuple, order:2, indexed:false, value:[{name:amountIn, type:uint256, order:1, indexed:false, value:50000000000000000, valueString:50000000000000000}, {name:amountOut, type:uint256, order:2, indexed:false, value:164328680544049425674, valueString:164328680544049425674}, {name:dustOut, type:uint256, order:3, indexed:false, value:0, valueString:0}, {name:tokenIn, type:address, order:4, indexed:false, value:0x0000000000000000000000000000000000000000, valueString:0x0000000000000000000000000000000000000000}, {name:tokenOut, type:address, order:5, indexed:false, value:0x4d224452801ACEd8B2F0aebE155379bb5D594381, valueString:0x4d224452801ACEd8B2F0aebE155379bb5D594381}, {name:direction, type:uint8, order:6, indexed:false, value:0, valueString:0}, {name:refund, type:address, order:7, indexed:false, value:0x5849Df6c474845a421DE33b95eCE4f27195d3d04, valueString:0x5849Df6c474845a421DE33b95eCE4f27195d3d04}, {name:additionalArgs, type:bytes, order:8, indexed:false, value:0xC02AAA39B223FE8D0A0E5C4F27EAD9083C756CC2000BB84D224452801ACED8B2F0AEBE155379BB5D594381, valueString:0xC02AAA39B223FE8D0A0E5C4F27EAD9083C756CC2000BB84D224452801ACED8B2F0AEBE155379BB5D594381}], valueString:[{name:amountIn, type:uint256, order:1, indexed:false, value:50000000000000000, valueString:50000000000000000}, {name:amountOut, type:uint256, order:2, indexed:false, value:164328680544049425674, valueString:164328680544049425674}, {name:dustOut, type:uint256, order:3, indexed:false, value:0, valueString:0}, {name:tokenIn, type:address, order:4, indexed:false, value:0x0000000000000000000000000000000000000000, valueString:0x0000000000000000000000000000000000000000}, {name:tokenOut, type:address, order:5, indexed:false, value:0x4d224452801ACEd8B2F0aebE155379bb5D594381, valueString:0x4d224452801ACEd8B2F0aebE155379bb5D594381}, {name:direction, type:uint8, order:6, indexed:false, value:0, valueString:0}, {name:refund, type:address, order:7, indexed:false, value:0x5849Df6c474845a421DE33b95eCE4f27195d3d04, valueString:0x5849Df6c474845a421DE33b95eCE4f27195d3d04}, {name:additionalArgs, type:bytes, order:8, indexed:false, value:0xC02AAA39B223FE8D0A0E5C4F27EAD9083C756CC2000BB84D224452801ACED8B2F0AEBE155379BB5D594381, valueString:0xC02AAA39B223FE8D0A0E5C4F27EAD9083C756CC2000BB84D224452801ACED8B2F0AEBE155379BB5D594381}]}], valueString:[{name:swapperId, type:uint8, order:1, indexed:false, value:0, valueString:0}, {name:swapParams, type:tuple, order:2, indexed:false, value:[{name:amountIn, type:uint256, order:1, indexed:false, value:50000000000000000, valueString:50000000000000000}, {name:amountOut, type:uint256, order:2, indexed:false, value:164328680544049425674, valueString:164328680544049425674}, {name:dustOut, type:uint256, order:3, indexed:false, value:0, valueString:0}, {name:tokenIn, type:address, order:4, indexed:false, value:0x0000000000000000000000000000000000000000, valueString:0x0000000000000000000000000000000000000000}, {name:tokenOut, type:address, order:5, indexed:false, value:0x4d224452801ACEd8B2F0aebE155379bb5D594381, valueString:0x4d224452801ACEd8B2F0aebE155379bb5D594381}, {name:direction, type:uint8, order:6, indexed:false, value:0, valueString:0}, {name:refund, type:address, order:7, indexed:false, value:0x5849Df6c474845a421DE33b95eCE4f27195d3d04, valueString:0x5849Df6c474845a421DE33b95eCE4f27195d3d04}, {name:additionalArgs, type:bytes, order:8, indexed:false, value:0xC02AAA39B223FE8D0A0E5C4F27EAD9083C756CC2000BB84D224452801ACED8B2F0AEBE155379BB5D594381, valueString:0xC02AAA39B223FE8D0A0E5C4F27EAD9083C756CC2000BB84D224452801ACED8B2F0AEBE155379BB5D594381}], valueString:[{name:amountIn, type:uint256, order:1, indexed:false, value:50000000000000000, valueString:50000000000000000}, {name:amountOut, type:uint256, order:2, indexed:false, value:164328680544049425674, valueString:164328680544049425674}, {name:dustOut, type:uint256, order:3, indexed:false, value:0, valueString:0}, {name:tokenIn, type:address, order:4, indexed:false, value:0x0000000000000000000000000000000000000000, valueString:0x0000000000000000000000000000000000000000}, {name:tokenOut, type:address, order:5, indexed:false, value:0x4d224452801ACEd8B2F0aebE155379bb5D594381, valueString:0x4d224452801ACEd8B2F0aebE155379bb5D594381}, {name:direction, type:uint8, order:6, indexed:false, value:0, valueString:0}, {name:refund, type:address, order:7, indexed:false, value:0x5849Df6c474845a421DE33b95eCE4f27195d3d04, valueString:0x5849Df6c474845a421DE33b95eCE4f27195d3d04}, {name:additionalArgs, type:bytes, order:8, indexed:false, value:0xC02AAA39B223FE8D0A0E5C4F27EAD9083C756CC2000BB84D224452801ACED8B2F0AEBE155379BB5D594381, valueString:0xC02AAA39B223FE8D0A0E5C4F27EAD9083C756CC2000BB84D224452801ACED8B2F0AEBE155379BB5D594381}]}]}, {name:postBridge, type:tuple, order:2, indexed:false, value:[{name:swapperId, type:uint8, order:1, indexed:false, value:0, valueString:0}, {name:swapParams, type:tuple, order:2, indexed:false, value:[{name:amountIn, type:uint256, order:1, indexed:false, value:164328680544049425674, valueString:164328680544049425674}, {name:amountOut, type:uint256, order:2, indexed:false, value:164328680544049425674, valueString:164328680544049425674}, {name:dustOut, type:uint256, order:3, indexed:false, value:0, valueString:0}, {name:tokenIn, type:address, order:4, indexed:false, value:0x0000000000000000000000000000000000000000, valueString:0x0000000000000000000000000000000000000000}, {name:tokenOut, type:address, order:5, indexed:false, value:0x0000000000000000000000000000000000000000, valueString:0x0000000000000000000000000000000000000000}, {name:direction, type:uint8, order:6, indexed:false, value:0, valueString:0}, {name:refund, type:address, order:7, indexed:false, value:0x5849Df6c474845a421DE33b95eCE4f27195d3d04, valueString:0x5849Df6c474845a421DE33b95eCE4f27195d3d04}, {name:additionalArgs, type:bytes, order:8, indexed:false, value:0x, valueString:0x}], valueString:[{name:amountIn, type:uint256, order:1, indexed:false, value:164328680544049425674, valueString:164328680544049425674}, {name:amountOut, type:uint256, order:2, indexed:false, value:164328680544049425674, valueString:164328680544049425674}, {name:dustOut, type:uint256, order:3, indexed:false, value:0, valueString:0}, {name:tokenIn, type:address, order:4, indexed:false, value:0x0000000000000000000000000000000000000000, valueString:0x0000000000000000000000000000000000000000}, {name:tokenOut, type:address, order:5, indexed:false, value:0x0000000000000000000000000000000000000000, valueString:0x0000000000000000000000000000000000000000}, {name:direction, type:uint8, order:6, indexed:false, value:0, valueString:0}, {name:refund, type:address, order:7, indexed:false, value:0x5849Df6c474845a421DE33b95eCE4f27195d3d04, valueString:0x5849Df6c474845a421DE33b95eCE4f27195d3d04}, {name:additionalArgs, type:bytes, order:8, indexed:false, value:0x, valueString:0x}]}], valueString:[{name:swapperId, type:uint8, order:1, indexed:false, value:0, valueString:0}, {name:swapParams, type:tuple, order:2, indexed:false, value:[{name:amountIn, type:uint256, order:1, indexed:false, value:164328680544049425674, valueString:164328680544049425674}, {name:amountOut, type:uint256, order:2, indexed:false, value:164328680544049425674, valueString:164328680544049425674}, {name:dustOut, type:uint256, order:3, indexed:false, value:0, valueString:0}, {name:tokenIn, type:address, order:4, indexed:false, value:0x0000000000000000000000000000000000000000, valueString:0x0000000000000000000000000000000000000000}, {name:tokenOut, type:address, order:5, indexed:false, value:0x0000000000000000000000000000000000000000, valueString:0x0000000000000000000000000000000000000000}, {name:direction, type:uint8, order:6, indexed:false, value:0, valueString:0}, {name:refund, type:address, order:7, indexed:false, value:0x5849Df6c474845a421DE33b95eCE4f27195d3d04, valueString:0x5849Df6c474845a421DE33b95eCE4f27195d3d04}, {name:additionalArgs, type:bytes, order:8, indexed:false, value:0x, valueString:0x}], valueString:[{name:amountIn, type:uint256, order:1, indexed:false, value:164328680544049425674, valueString:164328680544049425674}, {name:amountOut, type:uint256, order:2, indexed:false, value:164328680544049425674, valueString:164328680544049425674}, {name:dustOut, type:uint256, order:3, indexed:false, value:0, valueString:0}, {name:tokenIn, type:address, order:4, indexed:false, value:0x0000000000000000000000000000000000000000, valueString:0x0000000000000000000000000000000000000000}, {name:tokenOut, type:address, order:5, indexed:false, value:0x0000000000000000000000000000000000000000, valueString:0x0000000000000000000000000000000000000000}, {name:direction, type:uint8, order:6, indexed:false, value:0, valueString:0}, {name:refund, type:address, order:7, indexed:false, value:0x5849Df6c474845a421DE33b95eCE4f27195d3d04, valueString:0x5849Df6c474845a421DE33b95eCE4f27195d3d04}, {name:additionalArgs, type:bytes, order:8, indexed:false, value:0x, valueString:0x}]}]}, {name:bridgeId, type:uint8, order:3, indexed:false, value:2, valueString:2}, {name:dstChainId, type:uint256, order:4, indexed:false, value:33139, valueString:33139}, {name:target, type:address, order:5, indexed:false, value:0x5849Df6c474845a421DE33b95eCE4f27195d3d04, valueString:0x5849Df6c474845a421DE33b95eCE4f27195d3d04}, {name:paymentOperator, type:address, order:6, indexed:false, value:0x5849Df6c474845a421DE33b95eCE4f27195d3d04, valueString:0x5849Df6c474845a421DE33b95eCE4f27195d3d04}, {name:refund, type:address, order:7, indexed:false, value:0x5849Df6c474845a421DE33b95eCE4f27195d3d04, valueString:0x5849Df6c474845a421DE33b95eCE4f27195d3d04}, {name:payload, type:bytes, order:8, indexed:false, value:0x, valueString:0x}, {name:additionalArgs, type:bytes, order:9, indexed:false, value:0x0000000000000000000000004D224452801ACED8B2F0AEBE155379BB5D59438100000000000000000000000000000000000000000000000000000000000F4240, valueString:0x0000000000000000000000004D224452801ACED8B2F0AEBE155379BB5D59438100000000000000000000000000000000000000000000000000000000000F4240}, {name:txId, type:bytes32, order:10, indexed:false, value:E03306B1DACBB4EBDEF721401111CE28BB2870AEC07E8C3CD4FC8A47D0B17B30, valueString:E03306B1DACBB4EBDEF721401111CE28BB2870AEC07E8C3CD4FC8A47D0B17B30}], feeData=[{name:appId, type:bytes4, order:1, indexed:false, value:2+n6NQ==, valueString:System.Byte[]}, {name:affiliateId, type:bytes4, order:2, indexed:false, value:AAAAAA==, valueString:System.Byte[]}, {name:bridgeFee, type:uint256, order:3, indexed:false, value:49611304940061, valueString:49611304940061}, {name:deadline, type:uint256, order:4, indexed:false, value:1729458820, valueString:1729458820}, {name:chainId, type:uint256, order:5, indexed:false, value:1, valueString:1}, {name:appFees, type:tuple[], order:6, indexed:false}], signature=0xF3033AB963ED3E821351EC74373B795B3B45DFE7660D6F4F851F16896AFCF69312234312541D8405F6AC74918B9C23FA61F2AFCEAD6B86AD5242DCA845D306591C )
  • UTBFeeManager.verifySignature( packedInfo=0x00000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000500000000000000000000000000000000000000000000000000000000000000014000000000000000000000000000000000000000000000000000000000000002E0000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000081730000000000000000000000005849DF6C474845A421DE33B95ECE4F27195D3D040000000000000000000000005849DF6C474845A421DE33B95ECE4F27195D3D040000000000000000000000005849DF6C474845A421DE33B95ECE4F27195D3D0400000000000000000000000000000000000000000000000000000000000004400000000000000000000000000000000000000000000000000000000000000460E03306B1DACBB4EBDEF721401111CE28BB2870AEC07E8C3CD4FC8A47D0B17B300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000B1A2BC2EC50000000000000000000000000000000000000000000000000008E884C04DDCB5ED0A000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004D224452801ACED8B2F0AEBE155379BB5D59438100000000000000000000000000000000000000000000000000000000000000000000000000000000000000005849DF6C474845A421DE33B95ECE4F27195D3D040000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000002BC02AAA39B223FE8D0A0E5C4F27EAD9083C756CC2000BB84D224452801ACED8B2F0AEBE155379BB5D59438100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000008E884C04DDCB5ED0A000000000000000000000000000000000000000000000008E884C04DDCB5ED0A00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005849DF6C474845A421DE33B95ECE4F27195D3D0400000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000000000000004D224452801ACED8B2F0AEBE155379BB5D59438100000000000000000000000000000000000000000000000000000000000F4240DBE9FA3500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002D1F0835321D0000000000000000000000000000000000000000000000000000000067157284000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000C0000000000000000000000000000000000000000000000000000000000000000100000000000000000000000006DD843B78E6CC34744473176D8A61743EEFAA9A000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003691D6AFC000, signature=0xF3033AB963ED3E821351EC74373B795B3B45DFE7660D6F4F851F16896AFCF69312234312541D8405F6AC74918B9C23FA61F2AFCEAD6B86AD5242DCA845D306591C )
    • Null: 0x000...001.b8a4f2c2( )
    • ETH 0.00006 GnosisSafeProxy.CALL( )
      • ETH 0.00006 GnosisSafeL2.DELEGATECALL( )
      • ETH 0.05 WETH9.CALL( )
      • WETH9.approve( guy=0x2EeC08Fb9C0FcCCF64780c329cec64Ae12D7a28E, wad=50000000000000000 ) => ( True )
      • UniSwapper.swap( swapParams=[{name:amountIn, type:uint256, order:1, indexed:false, value:50000000000000000, valueString:50000000000000000}, {name:amountOut, type:uint256, order:2, indexed:false, value:164328680544049425674, valueString:164328680544049425674}, {name:dustOut, type:uint256, order:3, indexed:false, value:0, valueString:0}, {name:tokenIn, type:address, order:4, indexed:false, value:0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2, valueString:0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2}, {name:tokenOut, type:address, order:5, indexed:false, value:0x4d224452801ACEd8B2F0aebE155379bb5D594381, valueString:0x4d224452801ACEd8B2F0aebE155379bb5D594381}, {name:direction, type:uint8, order:6, indexed:false, value:0, valueString:0}, {name:refund, type:address, order:7, indexed:false, value:0x5849Df6c474845a421DE33b95eCE4f27195d3d04, valueString:0x5849Df6c474845a421DE33b95eCE4f27195d3d04}, {name:additionalArgs, type:bytes, order:8, indexed:false, value:0xC02AAA39B223FE8D0A0E5C4F27EAD9083C756CC2000BB84D224452801ACED8B2F0AEBE155379BB5D594381, valueString:0xC02AAA39B223FE8D0A0E5C4F27EAD9083C756CC2000BB84D224452801ACED8B2F0AEBE155379BB5D594381}] ) => ( tokenOut=0x0000000000000000000000000000000000000000, amountOut=862718293348820473429344482784628181556388621521298319395315527974912 )
        • WETH9.transferFrom( src=0x14036De12aC0C96d4d5eD03e150d6558A43bBeE5, dst=0x2EeC08Fb9C0FcCCF64780c329cec64Ae12D7a28E, wad=50000000000000000 ) => ( True )
        • WETH9.approve( guy=0x68b3465833fb72A70ecDF485E0e4C7bD8665Fc45, wad=50000000000000000 ) => ( True )
        • SwapRouter02.exactInput( params=[{name:path, type:bytes, order:1, indexed:false, value:0xC02AAA39B223FE8D0A0E5C4F27EAD9083C756CC2000BB84D224452801ACED8B2F0AEBE155379BB5D594381, valueString:0xC02AAA39B223FE8D0A0E5C4F27EAD9083C756CC2000BB84D224452801ACED8B2F0AEBE155379BB5D594381}, {name:recipient, type:address, order:2, indexed:false, value:0x2EeC08Fb9C0FcCCF64780c329cec64Ae12D7a28E, valueString:0x2EeC08Fb9C0FcCCF64780c329cec64Ae12D7a28E}, {name:amountIn, type:uint256, order:3, indexed:false, value:50000000000000000, valueString:50000000000000000}, {name:amountOutMinimum, type:uint256, order:4, indexed:false, value:164328680544049425674, valueString:164328680544049425674}] ) => ( amountOut=3963877391197344453575983046348115674221700746820753546331534351508065746944 )
          • Uniswap V3: APE 7.128acb08( )
            • SimpleToken.transfer( recipient=0x2EeC08Fb9C0FcCCF64780c329cec64Ae12D7a28E, amount=154002406954676645998 ) => ( True )
            • WETH9.balanceOf( 0xAc4b3DacB91461209Ae9d41EC517c2B9Cb1B7DAF ) => ( 47227808816362192363 )
            • SwapRouter02.uniswapV3SwapCallback( amount0Delta=-154002406954676645998, amount1Delta=50000000000000000, _data=0x000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000400000000000000000000000002EEC08FB9C0FCCCF64780C329CEC64AE12D7A28E000000000000000000000000000000000000000000000000000000000000002BC02AAA39B223FE8D0A0E5C4F27EAD9083C756CC2000BB84D224452801ACED8B2F0AEBE155379BB5D594381000000000000000000000000000000000000000000 )
              • WETH9.transferFrom( src=0x2EeC08Fb9C0FcCCF64780c329cec64Ae12D7a28E, dst=0xAc4b3DacB91461209Ae9d41EC517c2B9Cb1B7DAF, wad=50000000000000000 ) => ( True )
              • WETH9.balanceOf( 0xAc4b3DacB91461209Ae9d41EC517c2B9Cb1B7DAF ) => ( 47277808816362192363 )
                File 1 of 8: UTB
                1
                2
                3
                4
                5
                6
                7
                8
                9
                10
                11
                12
                13
                14
                15
                16
                // SPDX-License-Identifier: GPL-3.0
                pragma solidity 0.8.24;
                import {Roles} from "./utils/Roles.sol";
                import {IUTB} from "./interfaces/IUTB.sol";
                import {IUTBExecutor} from "./interfaces/IUTBExecutor.sol";
                import {IERC20} from "@openzeppelin/contracts/interfaces/IERC20.sol";
                import {SafeERC20} from "@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol";
                import {IWETH} from "./interfaces/IWETH.sol";
                import {IUTBFeeManager} from "./interfaces/IUTBFeeManager.sol";
                import {IBridgeAdapter} from "./interfaces/IBridgeAdapter.sol";
                import {ISwapper} from "./interfaces/ISwapper.sol";
                import {SwapInstructions, SwapParams, FeeData, Fee, BridgeInstructions, SwapAndExecuteInstructions} from "./CommonTypes.sol";
                contract UTB is IUTB, Roles {
                constructor() Roles(msg.sender) {}
                IUTBExecutor public executor;
                IUTBFeeManager public feeManager;
                XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

                File 2 of 8: UTBFeeManager
                1
                2
                3
                4
                5
                6
                7
                8
                9
                10
                11
                12
                13
                14
                15
                16
                // SPDX-License-Identifier: GPL-3.0
                pragma solidity 0.8.24;
                import {IUTBFeeManager} from "./interfaces/IUTBFeeManager.sol";
                import {Roles} from "./utils/Roles.sol";
                contract UTBFeeManager is IUTBFeeManager, Roles {
                address public signer;
                string constant BANNER = "\\x19Ethereum Signed Message:\
                32";
                constructor(address _signer) Roles(msg.sender) {
                signer = _signer;
                }
                /// @inheritdoc IUTBFeeManager
                function setSigner(address _signer) public onlyAdmin {
                signer = _signer;
                emit SetSigner(_signer);
                }
                XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

                File 3 of 8: GnosisSafeProxy
                1
                2
                3
                4
                5
                6
                7
                8
                9
                10
                11
                12
                13
                14
                15
                16
                // SPDX-License-Identifier: LGPL-3.0-only
                pragma solidity >=0.7.0 <0.9.0;
                /// @title IProxy - Helper interface to access masterCopy of the Proxy on-chain
                /// @author Richard Meissner - <richard@gnosis.io>
                interface IProxy {
                function masterCopy() external view returns (address);
                }
                /// @title GnosisSafeProxy - Generic proxy contract allows to execute all transactions applying the code of a master contract.
                /// @author Stefan George - <stefan@gnosis.io>
                /// @author Richard Meissner - <richard@gnosis.io>
                contract GnosisSafeProxy {
                // singleton always needs to be first declared variable, to ensure that it is at the same location in the contracts to which calls are delegated.
                // To reduce deployment costs this variable is internal and needs to be retrieved via `getStorageAt`
                address internal singleton;
                XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

                File 4 of 8: GnosisSafeL2
                1
                2
                3
                4
                5
                6
                7
                8
                9
                10
                11
                12
                13
                14
                15
                16
                // SPDX-License-Identifier: LGPL-3.0-only
                pragma solidity >=0.7.0 <0.9.0;
                import "./base/ModuleManager.sol";
                import "./base/OwnerManager.sol";
                import "./base/FallbackManager.sol";
                import "./base/GuardManager.sol";
                import "./common/EtherPaymentFallback.sol";
                import "./common/Singleton.sol";
                import "./common/SignatureDecoder.sol";
                import "./common/SecuredTokenTransfer.sol";
                import "./common/StorageAccessible.sol";
                import "./interfaces/ISignatureValidator.sol";
                import "./external/GnosisSafeMath.sol";
                /// @title Gnosis Safe - A multisignature wallet with support for confirmations using signed messages based on ERC191.
                /// @author Stefan George - <stefan@gnosis.io>
                /// @author Richard Meissner - <richard@gnosis.io>
                XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

                File 5 of 8: WETH9
                1
                2
                3
                4
                5
                6
                7
                8
                9
                10
                11
                12
                13
                14
                15
                16
                // 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;
                XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

                File 6 of 8: UniSwapper
                1
                2
                3
                4
                5
                6
                7
                8
                9
                10
                11
                12
                13
                14
                15
                16
                // SPDX-License-Identifier: GPL-3.0
                pragma solidity 0.8.24;
                import {SwapParams, SwapDirection} from "../CommonTypes.sol";
                import {IERC20} from "@openzeppelin/contracts/interfaces/IERC20.sol";
                import {SafeERC20} from "@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol";
                import {IWETH} from "../interfaces/IWETH.sol";
                import {Swapper} from "../../src/swappers/Swapper.sol";
                import {IV3SwapRouter} from "@uniswap/swap-router-contracts/contracts/interfaces/IV3SwapRouter.sol";
                contract UniSwapper is Swapper {
                uint8 public constant ID = 0;
                address public uniswap_router;
                function setRouter(address _router) public onlyAdmin {
                uniswap_router = _router;
                }
                function swap(
                SwapParams memory swapParams
                XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

                File 7 of 8: SwapRouter02
                1
                2
                3
                4
                5
                6
                7
                8
                9
                10
                11
                12
                13
                14
                15
                16
                // SPDX-License-Identifier: GPL-2.0-or-later
                pragma solidity =0.7.6;
                pragma abicoder v2;
                import '@uniswap/v3-periphery/contracts/base/SelfPermit.sol';
                import '@uniswap/v3-periphery/contracts/base/PeripheryImmutableState.sol';
                import './interfaces/ISwapRouter02.sol';
                import './V2SwapRouter.sol';
                import './V3SwapRouter.sol';
                import './base/ApproveAndCall.sol';
                import './base/MulticallExtended.sol';
                /// @title Uniswap V2 and V3 Swap Router
                contract SwapRouter02 is ISwapRouter02, V2SwapRouter, V3SwapRouter, ApproveAndCall, MulticallExtended, SelfPermit {
                constructor(
                address _factoryV2,
                address factoryV3,
                address _positionManager,
                XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

                File 8 of 8: SimpleToken
                1
                2
                3
                4
                5
                6
                7
                8
                9
                10
                11
                12
                13
                14
                15
                16
                // SPDX-License-Identifier: MIT
                pragma solidity ^0.8.10;
                import "@openzeppelin/contracts/token/ERC20/ERC20.sol";
                contract SimpleToken is ERC20 {
                constructor(
                string memory name,
                string memory symbol,
                uint256 totalSupply_
                ) ERC20(name, symbol) {
                _mint(msg.sender, totalSupply_);
                }
                }
                // SPDX-License-Identifier: MIT
                // OpenZeppelin Contracts v4.4.1 (utils/Context.sol)
                pragma solidity ^0.8.0;
                /**
                XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX