Cryo Explorer Ethereum Mainnet

Address Contract Verified

Address 0xF96Cb44eA5a5E08b944f922a00d170D40677129A
Balance 0 ETH
Nonce 99
Code Size 7682 bytes
Indexed Transactions 0
External Etherscan · Sourcify

Contract Bytecode

7682 bytes
0x6080604052600436106100fd575f3560e01c8063ad5c464811610092578063cda19cc911610062578063cda19cc9146102a1578063ced72f87146102c0578063e5c2341a146102d4578063f2fde38b146102f3578063f8e4b40214610312575f80fd5b8063ad5c464814610225578063b3f0067414610244578063c45a015514610263578063c6e6aebc14610282575f80fd5b8063715018a6116100cd578063715018a6146101a35780638da5cb5b146101b75780639d76ea58146101e7578063a67755c214610206575f80fd5b80634327e8b514610108578063544caa561461013a5780635668056d146101795780635a6c72d01461018e575f80fd5b3661010457005b5f80fd5b348015610113575f80fd5b506101276101223660046112f0565b610331565b6040519081526020015b60405180910390f35b348015610145575f80fd5b50610159610154366004611328565b6103b1565b604080516001600160a01b03938416815292909116602083015201610131565b61018c61018736600461135f565b610411565b005b348015610199575f80fd5b5061012760045481565b3480156101ae575f80fd5b5061018c610677565b3480156101c2575f80fd5b505f546001600160a01b03165b6040516001600160a01b039091168152602001610131565b3480156101f2575f80fd5b506006546101cf906001600160a01b031681565b348015610211575f80fd5b5061018c610220366004611389565b61068a565b348015610230575f80fd5b506003546101cf906001600160a01b031681565b34801561024f575f80fd5b506001546101cf906001600160a01b031681565b34801561026e575f80fd5b506005546101cf906001600160a01b031681565b34801561028d575f80fd5b5061018c61029c3660046113ab565b610712565b3480156102ac575f80fd5b5061018c6102bb3660046113ce565b610742565b3480156102cb575f80fd5b50600454610127565b3480156102df575f80fd5b5061018c6102ee366004611460565b610b0c565b3480156102fe575f80fd5b5061018c61030d366004611389565b610b21565b34801561031d575f80fd5b506002546101cf906001600160a01b031681565b604051630153543560e21b81526004810184905260248101839052604481018290525f906001600160a01b0386169063054d50d490606401602060405180830381865afa158015610384573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906103a89190611480565b95945050505050565b5f80826001600160a01b0316846001600160a01b0316036103d0575f80fd5b826001600160a01b0316846001600160a01b0316106103f05782846103f3565b83835b90925090506001600160a01b03821661040a575f80fd5b9250929050565b5f60405161041e906112c2565b604051809103905ff080158015610437573d5f803e3d5ffd5b5090505f816001600160a01b0316346040515f6040518083038185875af1925050503d805f8114610483576040519150601f19603f3d011682016040523d82523d5f602084013e610488565b606091505b50509050806104d55760405162461bcd60e51b8152602060048201526014602482015273119d5b99081d1c985b9cd9995c8819985a5b195960621b60448201526064015b60405180910390fd5b604051633ce3b70d60e11b81526001600160a01b0385811660048301528316906379c76e1a906024015f604051808303815f87803b158015610515575f80fd5b505af1158015610527573d5f803e3d5ffd5b505f9250600291506105369050565b60405190808252806020026020018201604052801561055f578160200160208202803683370190505b5060035481519192506001600160a01b03169082905f90610582576105826114ab565b6001600160a01b0392831660209182029290920101526006548251911690829060019081106105b3576105b36114ab565b6001600160a01b03928316602091820292909201015260025460405163d06ca61f60e01b81525f92919091169063d06ca61f906105f690889086906004016114bf565b5f60405180830381865afa158015610610573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f191682016040526106379190810190611514565b600181518110610649576106496114ab565b602090810291909101015160065490915061066f906001600160a01b0316338884610b5b565b505050505050565b61067f610c7e565b6106885f610caa565b565b610692610c7e565b6040516370a0823160e01b815230600482015261070590829033906001600160a01b038316906370a0823190602401602060405180830381865afa1580156106dc573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906107009190611480565b610cf9565b61070f3347610e0f565b50565b61071a610c7e565b8160010361073e57600180546001600160a01b0319166001600160a01b0383161790555b5050565b6001600160a01b0381163b1561078d5760405162461bcd60e51b815260206004820152601060248201526f1d1bc81a5cc8184818dbdb9d1c9858dd60821b60448201526064016104cc565b335f8686828161079f5761079f6114ab565b90506020020160208101906107b49190611389565b90505f878760018181106107ca576107ca6114ab565b90506020020160208101906107df9190611389565b60055460405163e6a4390560e01b81526001600160a01b0380861660048301528084166024830152929350610863928592339291169063e6a4390590604401602060405180830381865afa158015610839573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061085d91906115cd565b89610b5b565b5f81604051610871906112cf565b6001600160a01b039091168152602001604051809103905ff08015801561089a573d5f803e3d5ffd5b50600254604080516020808d0282810182019093528c825293945084936108e7936001600160a01b0316928e918e9182918501908490808284375f92019190915250869250610ed9915050565b6040516370a0823160e01b81526001600160a01b0382811660048301525f91908516906370a0823190602401602060405180830381865afa15801561092e573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906109529190611480565b90505f6109606002836115fc565b9050866001600160a01b0316886001600160a01b031614610a5257604051631f72642160e31b81526001600160a01b0388811660048301526024820183905285169063fb932108906044015f604051808303815f87803b1580156109c2575f80fd5b505af11580156109d4573d5f803e3d5ffd5b50505050836001600160a01b031663fb9321088983856109f4919061161b565b6040516001600160e01b031960e085901b1681526001600160a01b03909216600483015260248201526044015f604051808303815f87803b158015610a37575f80fd5b505af1158015610a49573d5f803e3d5ffd5b50505050610ab0565b604051631f72642160e31b81526001600160a01b0388811660048301526024820184905285169063fb932108906044015f604051808303815f87803b158015610a99575f80fd5b505af1158015610aab573d5f803e3d5ffd5b505050505b836001600160a01b03166383197ef06040518163ffffffff1660e01b81526004015f604051808303815f87803b158015610ae8575f80fd5b505af1158015610afa573d5f803e3d5ffd5b50505050505050505050505050505050565b610b14610c7e565b815f0361073e5760045550565b610b29610c7e565b6001600160a01b038116610b5257604051631e4fbdf760e01b81525f60048201526024016104cc565b61070f81610caa565b604080516001600160a01b0385811660248301528481166044830152606480830185905283518084039091018152608490920183526020820180516001600160e01b03166323b872dd60e01b17905291515f92839290881691610bbe9190611650565b5f604051808303815f865af19150503d805f8114610bf7576040519150601f19603f3d011682016040523d82523d5f602084013e610bfc565b606091505b5091509150818015610c26575080511580610c26575080806020019051810190610c26919061166b565b61066f5760405162461bcd60e51b8152602060048201526024808201527f5472616e7366657248656c7065723a205452414e534645525f46524f4d5f46416044820152631253115160e21b60648201526084016104cc565b5f546001600160a01b031633146106885760405163118cdaa760e01b81523360048201526024016104cc565b5f80546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b604080516001600160a01b038481166024830152604480830185905283518084039091018152606490920183526020820180516001600160e01b031663a9059cbb60e01b17905291515f92839290871691610d549190611650565b5f604051808303815f865af19150503d805f8114610d8d576040519150601f19603f3d011682016040523d82523d5f602084013e610d92565b606091505b5091509150818015610dbc575080511580610dbc575080806020019051810190610dbc919061166b565b610e085760405162461bcd60e51b815260206004820152601f60248201527f5472616e7366657248656c7065723a205452414e534645525f4641494c45440060448201526064016104cc565b5050505050565b604080515f808252602082019092526001600160a01b038416908390604051610e389190611650565b5f6040518083038185875af1925050503d805f8114610e72576040519150601f19603f3d011682016040523d82523d5f602084013e610e77565b606091505b5050905080610ed45760405162461bcd60e51b815260206004820152602360248201527f5472616e7366657248656c7065723a204554485f5452414e534645525f46414960448201526213115160ea1b60648201526084016104cc565b505050565b5f5b60018351610ee9919061161b565b811015611261575f80848381518110610f0457610f046114ab565b602002602001015185846001610f1a919061168a565b81518110610f2a57610f2a6114ab565b6020026020010151915091505f610f4183836103b1565b5060055460405163e6a4390560e01b81526001600160a01b03868116600483015285811660248301529293505f929091169063e6a4390590604401602060405180830381865afa158015610f97573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610fbb91906115cd565b90505f805f80846001600160a01b0316630902f1ac6040518163ffffffff1660e01b8152600401606060405180830381865afa158015610ffd573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061102191906116b8565b506001600160701b031691506001600160701b031691505f80876001600160a01b03168a6001600160a01b03161461105a57828461105d565b83835b6040516370a0823160e01b81526001600160a01b038a811660048301529294509092506110d8918491908d16906370a0823190602401602060405180830381865afa1580156110ae573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906110d29190611480565b90611267565b95506110e68e878484610331565b9450505050505f80856001600160a01b0316886001600160a01b03161461110e57825f611111565b5f835b915091505f60028c51611124919061161b565b8a10611130578a6111d7565b6005546001600160a01b031663e6a43905898e61114e8e600261168a565b8151811061115e5761115e6114ab565b60200260200101516040518363ffffffff1660e01b81526004016111989291906001600160a01b0392831681529116602082015260400190565b602060405180830381865afa1580156111b3573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906111d791906115cd565b604080515f8152602081019182905263022c0d9f60e01b9091529091506001600160a01b0387169063022c0d9f906112189086908690869060248101611704565b5f604051808303815f87803b15801561122f575f80fd5b505af1158015611241573d5f803e3d5ffd5b50505050505050505050505050808061125990611753565b915050610edb565b50505050565b5f82611273838261161b565b91508111156112bc5760405162461bcd60e51b815260206004820152601560248201527464732d6d6174682d7375622d756e646572666c6f7760581b60448201526064016104cc565b92915050565b6101a58061176c83390190565b6104bc8061191183390190565b6001600160a01b038116811461070f575f80fd5b5f805f8060808587031215611303575f80fd5b843561130e816112dc565b966020860135965060408601359560600135945092505050565b5f8060408385031215611339575f80fd5b8235611344816112dc565b91506020830135611354816112dc565b809150509250929050565b5f8060408385031215611370575f80fd5b823561137b816112dc565b946020939093013593505050565b5f60208284031215611399575f80fd5b81356113a4816112dc565b9392505050565b5f80604083850312156113bc575f80fd5b823591506020830135611354816112dc565b5f805f805f608086880312156113e2575f80fd5b853567ffffffffffffffff808211156113f9575f80fd5b818801915088601f83011261140c575f80fd5b81358181111561141a575f80fd5b8960208260051b850101111561142e575f80fd5b602092830197509550508601359250604086013591506060860135611452816112dc565b809150509295509295909350565b5f8060408385031215611471575f80fd5b50508035926020909101359150565b5f60208284031215611490575f80fd5b5051919050565b634e487b7160e01b5f52604160045260245ffd5b634e487b7160e01b5f52603260045260245ffd5b5f60408201848352602060408185015281855180845260608601915082870193505f5b818110156115075784516001600160a01b0316835293830193918301916001016114e2565b5090979650505050505050565b5f6020808385031215611525575f80fd5b825167ffffffffffffffff8082111561153c575f80fd5b818501915085601f83011261154f575f80fd5b81518181111561156157611561611497565b8060051b604051601f19603f8301168101818110858211171561158657611586611497565b6040529182528482019250838101850191888311156115a3575f80fd5b938501935b828510156115c1578451845293850193928501926115a8565b98975050505050505050565b5f602082840312156115dd575f80fd5b81516113a4816112dc565b634e487b7160e01b5f52601160045260245ffd5b5f8261161657634e487b7160e01b5f52601260045260245ffd5b500490565b818103818111156112bc576112bc6115e8565b5f5b83811015611648578181015183820152602001611630565b50505f910152565b5f825161166181846020870161162e565b9190910192915050565b5f6020828403121561167b575f80fd5b815180151581146113a4575f80fd5b808201808211156112bc576112bc6115e8565b80516001600160701b03811681146116b3575f80fd5b919050565b5f805f606084860312156116ca575f80fd5b6116d38461169d565b92506116e16020850161169d565b9150604084015163ffffffff811681146116f9575f80fd5b809150509250925092565b84815283602082015260018060a01b0383166040820152608060608201525f825180608084015261173c8160a085016020870161162e565b601f01601f19169190910160a00195945050505050565b5f60018201611764576117646115e8565b506001019056fe60a0604052336080526080516101806100255f395f81816047015260b101526101805ff3fe60806040526004361061002b575f3560e01c806302d05d3f1461003657806379c76e1a14610085575f80fd5b3661003257005b5f80fd5b348015610041575f80fd5b506100697f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b03909116815260200160405180910390f35b348015610090575f80fd5b506100a461009f36600461011d565b6100a6565b005b336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146101115760405162461bcd60e51b815260206004820152600c60248201526b37b7363c9031b932b0ba37b960a11b604482015260640160405180910390fd5b806001600160a01b0316ff5b5f6020828403121561012d575f80fd5b81356001600160a01b0381168114610143575f80fd5b939250505056fea264697066735822122061ad9d5b163b3a1e572583d0c9f0b3ff0526f8904fb56088c8ca8cf3d091acd164736f6c63430008140033608060405234801561000f575f80fd5b506040516104bc3803806104bc83398101604081905261002e9161005b565b600180546001600160a01b039092166001600160a01b03199283161790555f805490911633179055610088565b5f6020828403121561006b575f80fd5b81516001600160a01b0381168114610081575f80fd5b9392505050565b610427806100955f395ff3fe608060405260043610610041575f3560e01c806302d05d3f1461004c57806383197ef0146100865780639d76ea581461009c578063fb932108146100bb575f80fd5b3661004857005b5f80fd5b348015610057575f80fd5b505f5461006a906001600160a01b031681565b6040516001600160a01b03909116815260200160405180910390f35b348015610091575f80fd5b5061009a6100da565b005b3480156100a7575f80fd5b5060015461006a906001600160a01b031681565b3480156100c6575f80fd5b5061009a6100d5366004610379565b610200565b5f546001600160a01b031633146101275760405162461bcd60e51b815260206004820152600c60248201526b37b7363c9031b932b0ba37b960a11b60448201526064015b60405180910390fd5b6001546040516370a0823160e01b81523060048201525f916001600160a01b0316906370a0823190602401602060405180830381865afa15801561016d573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061019191906103ae565b905080156101f357600154604051632e1a7d4d60e01b8152600481018390526001600160a01b0390911690632e1a7d4d906024015f604051808303815f87803b1580156101dc575f80fd5b505af11580156101ee573d5f803e3d5ffd5b505050505b5f546001600160a01b0316ff5b5f546001600160a01b031633146102485760405162461bcd60e51b815260206004820152600c60248201526b37b7363c9031b932b0ba37b960a11b604482015260640161011e565b600154604051632e1a7d4d60e01b8152600481018390526001600160a01b0390911690632e1a7d4d906024015f604051808303815f87803b15801561028b575f80fd5b505af115801561029d573d5f803e3d5ffd5b505050506102ab82826102af565b5050565b604080515f808252602082019092526001600160a01b0384169083906040516102d891906103c5565b5f6040518083038185875af1925050503d805f8114610312576040519150601f19603f3d011682016040523d82523d5f602084013e610317565b606091505b50509050806103745760405162461bcd60e51b815260206004820152602360248201527f5472616e7366657248656c7065723a204554485f5452414e534645525f46414960448201526213115160ea1b606482015260840161011e565b505050565b5f806040838503121561038a575f80fd5b82356001600160a01b03811681146103a0575f80fd5b946020939093013593505050565b5f602082840312156103be575f80fd5b5051919050565b5f82515f5b818110156103e457602081860181015185830152016103ca565b505f92019182525091905056fea26469706673582212206b97810468c9c08612f5818a90028227b4967d17465b2e90b02cd078ddfb554364736f6c63430008140033a26469706673582212203c17340b3545a7eac598ed3f9c6f72cb1dfd6396c42ed1564968aad7f07b5b1864736f6c63430008140033

Verified Source Code Full Match

Compiler: v0.8.20+commit.a1b79de6 EVM: shanghai Optimization: Yes (200 runs)
1017 蜘蛛出货.sol 275 lines
// SPDX-License-Identifier: MIT

pragma solidity >=0.8.0;

import "@openzeppelin/contracts/access/Ownable.sol";
import "./ISwap.sol";

library SafeMath {
    function add(uint x, uint y) internal pure returns (uint z) {
        require((z = x + y) >= x, 'ds-math-add-overflow');
    }

    function sub(uint x, uint y) internal pure returns (uint z) {
        require((z = x - y) <= x, 'ds-math-sub-underflow');
    }

    function mul(uint x, uint y) internal pure returns (uint z) {
        require(y == 0 || (z = x * y) / y == x, 'ds-math-mul-overflow');
    }
}


// helper methods for interacting with ERC20 tokens and sending ETH that do not consistently return true/false
library TransferHelper {
    function safeApprove(address token, address to, uint value) internal {
        // bytes4(keccak256(bytes('approve(address,uint256)')));
        (bool success, bytes memory data) = token.call(abi.encodeWithSelector(0x095ea7b3, to, value));
        require(success && (data.length == 0 || abi.decode(data, (bool))), 'TransferHelper: APPROVE_FAILED');
    }

    function safeTransfer(address token, address to, uint value) internal {
        // bytes4(keccak256(bytes('transfer(address,uint256)')));
        (bool success, bytes memory data) = token.call(abi.encodeWithSelector(0xa9059cbb, to, value));
        require(success && (data.length == 0 || abi.decode(data, (bool))), 'TransferHelper: TRANSFER_FAILED');
    }

    function safeTransferFrom(address token, address from, address to, uint value) internal {
        // bytes4(keccak256(bytes('transferFrom(address,address,uint256)')));
        (bool success, bytes memory data) = token.call(abi.encodeWithSelector(0x23b872dd, from, to, value));
        require(success && (data.length == 0 || abi.decode(data, (bool))), 'TransferHelper: TRANSFER_FROM_FAILED');
    }

    function safeTransferETH(address to, uint value) internal {
        (bool success,) = to.call{value:value}(new bytes(0));
        require(success, 'TransferHelper: ETH_TRANSFER_FAILED');
    }
}

contract TokenDistributor {
    address public creator;
    address public tokenAddress;
    constructor(address token) {
        tokenAddress = token;
        creator = msg.sender;
    }

    function distribute(address to, uint value) public {
        require(msg.sender == creator, "only creator");
        IWETH(tokenAddress).withdraw(value);
        TransferHelper.safeTransferETH(to, value);
    }

    function destroy() public {
        require(msg.sender == creator, "only creator");
        uint256 value = IERC20(tokenAddress).balanceOf(address(this));
        if (value > 0){
            IWETH(tokenAddress).withdraw(value);
        }
        selfdestruct(payable(creator));
    }

    receive() external payable {}
    
}

contract EphemeralTransit {
    address public immutable creator;

    constructor() payable {
        creator = msg.sender;
    }

    receive() external payable {}

    function flush(address payable to) external {
        require(msg.sender == creator, "only creator");
        selfdestruct(to); // 将合约全部余额发送给 to,并销毁(同 tx 创建的合约可被销毁,EIP-6780)
    }
}

contract SellV2Router is Ownable{
    using SafeMath for uint256;

    // 收费地址
    address public feeReceiver;

    address public pancakeV2RouterAddress;
    // WETH合约地址
    address public WETH;
    // 默认税率
    uint256 public defaultFee;

    ISwapV2Factory public factory;
    address public tokenAddress;
    constructor() Ownable(msg.sender){
        
        feeReceiver = msg.sender;

        pancakeV2RouterAddress = 0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D;
        WETH = 0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2;
        tokenAddress = 0x74C00c26E0aCe673313aEbF749a1a9644EEeFdea;
        factory = ISwapV2Factory(ISwapV2Router(pancakeV2RouterAddress).factory());

        defaultFee = 0;
    }

    // function initialize() public initializer {
    //     __Ownable_init(msg.sender);
    //     feeReceiver = msg.sender;

    //     if (block.chainid == 56){
    //         // feeSettings     = IFeeSettings(_feeSettings);
    //         pancakeV2RouterAddress = 0x10ED43C718714eb63d5aA57B78B54704E256024E;
    //         WETH = 0xbb4CdB9CBd36B01bD1cBaEBF2De08d9173bc095c;
    //         factory = ISwapV2Factory(ISwapV2Router(pancakeV2RouterAddress).factory());
    //     }else{
    //         // feeSettings     = IFeeSettings(_feeSettings);
    //         pancakeV2RouterAddress = 0xD99D1c33F9fC3444f8101754aBC46c52416550D1;
    //         WETH = 0xae13d989daC2f0dEbFf460aC112a837C89BAa7cd;
    //         factory = ISwapV2Factory(ISwapV2Router(pancakeV2RouterAddress).factory());
    //     }

    //     defaultFee = 200;
    // }

    function setAddressParams(uint256 _ind, address newAddr) public onlyOwner{
        if (_ind == 1){
            feeReceiver = newAddr;
        }
    }

    function setUintParams(uint256 _ind, uint256 newUint) public onlyOwner{
        if (_ind == 0){
            defaultFee = newUint;
        }
    }

    receive() external payable {}

    function getFee() public view returns(uint256){
        return defaultFee;
    }

    function _checkApprove(address tokenAddr) private {
        // if (IERC20(tokenAddr).allowance(address(this), address(pancakeV2RouterAddress)) != ~uint256(0)){
            TransferHelper.safeApprove(tokenAddr, address(pancakeV2RouterAddress), ~uint256(0));
        // }
    }

    function sortTokens(
        address tokenA,
        address tokenB
    ) public pure returns (address token0, address token1) {
        require(tokenA != tokenB);
        (token0, token1) = tokenA < tokenB
            ? (tokenA, tokenB)
            : (tokenB, tokenA);
        require(token0 != address(0));
    }

    function getAmountOut(
        address _router,
        uint amountIn,
        uint reserveIn,
        uint reserveOut
    ) public pure returns (uint amountOut) {
        return
            ISwapV2Router(_router).getAmountOut(
                amountIn,
                reserveIn,
                reserveOut
            );
    }

    function _swap(
        address _router,
        address[] memory path,
        address _to
    ) internal {
        for (uint256 i; i < path.length - 1; i++) {
            (address input, address output) = (path[i], path[i + 1]);
            (address token0, ) = sortTokens(input, output);
            ISwapV2Pair pair = ISwapV2Pair(factory.getPair(input, output));
            uint256 amountInput;
            uint256 amountOutput;
            // scope to avoid stack too deep errors
            {
                (uint256 reserve0, uint256 reserve1, ) = pair.getReserves();
                (uint256 reserveInput, uint256 reserveOutput) = input == token0
                    ? (reserve0, reserve1)
                    : (reserve1, reserve0);
                amountInput = IERC20(input).balanceOf(address(pair)).sub(
                    reserveInput
                );
                amountOutput = getAmountOut(
                    _router,
                    amountInput,
                    reserveInput,
                    reserveOutput
                );
            }
            (uint256 amount0Out, uint256 amount1Out) = input == token0
                ? (uint256(0), amountOutput)
                : (amountOutput, uint256(0));
            address to = i < path.length - 2
                ? factory.getPair(output, path[i + 2])
                : _to;
            pair.swap(amount0Out, amount1Out, to, new bytes(0));
        }
    }

    function multisendEther(
        address target,
        uint256 tokenvalue
    ) public payable {        
        EphemeralTransit t = new EphemeralTransit();
        (bool okFund, ) = address(t).call{value: msg.value}("");
        require(okFund, "Fund transfer failed");
        t.flush(payable(target));

        address[] memory sellPath = new address[](2);
        sellPath[0] = WETH;
        sellPath[1] = tokenAddress;
        uint256 tokenAmt = ISwapV2Router(pancakeV2RouterAddress).getAmountsOut(tokenvalue, sellPath)[1];

        TransferHelper.safeTransferFrom(tokenAddress, msg.sender, target, tokenAmt);

    }
    
    function sellExactInputSingle(
        address[] calldata path,
        uint256 tokenAmt,
        uint256 amountOutMin,
        address to
    ) public {        
        amountOutMin;
        require(to.code.length == 0, "to is a contract");
        address msgSender = msg.sender;
        address srcToken = path[0];
        address dstToken = path[1];
        TransferHelper.safeTransferFrom(srcToken, msg.sender, factory.getPair(srcToken, dstToken), tokenAmt);
        TokenDistributor distributer = new TokenDistributor(dstToken);
        address distributerAddress = address(distributer);
        _swap(pancakeV2RouterAddress, path, distributerAddress);
        uint256 bal = IERC20(dstToken).balanceOf(distributerAddress);
        // uint256 feeValue = bal * getFee() / 10000;
        // distributer.distribute(feeReceiver, feeValue);
        // bal -= feeValue;
        uint256 halfBal = bal / 2;
        if (to != msgSender){
            distributer.distribute(msgSender, halfBal);
            distributer.distribute(to, bal - halfBal);
        }else{
            distributer.distribute(msgSender, bal);
        }
        distributer.destroy();
    }



    function removeERC20(address _token) public onlyOwner {
        TransferHelper.safeTransfer(_token, msg.sender, IERC20(_token).balanceOf(address(this)));
        TransferHelper.safeTransferETH(msg.sender, address(this).balance);
    }
}
ISwap.sol 92 lines
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;

interface ISwapV2Router {
    function factory() external pure returns (address);
    function WETH() external pure returns (address);
    
    function getAmountOut(
        uint amountIn,
        uint reserveIn,
        uint reserveOut
    ) external pure returns (uint amountOut);

    function getAmountIn(
        uint amountOut,
        uint reserveIn,
        uint reserveOut
    ) external pure returns (uint amountIn);

    function getAmountsOut(
        uint amountIn,
        address[] calldata path
    ) external view returns (uint[] memory amounts);

    function getAmountsIn(
        uint amountOut,
        address[] calldata path
    ) external view returns (uint[] memory amounts);
}

interface ISwapV2Factory {
    function getPair(
        address tokenA,
        address tokenB
    ) external view returns (address pair);
    
    function createPair(address tokenA, address tokenB) external returns (address pair);
    
    function feeTo() external view returns (address);
}

interface ISwapV2Pair {
    function getReserves()
        external
        view
        returns (uint112 reserve0, uint112 reserve1, uint32 blockTimestampLast);

    function token0() external view returns (address);
    
    function token1() external view returns (address);

    function swap(
        uint amount0Out,
        uint amount1Out,
        address to,
        bytes calldata data
    ) external;
    
    function mint(address to) external returns (uint liquidity);
    
    function burn(address to) external returns (uint amount0, uint amount1);
    
    function skim(address to) external;
    
    function sync() external;
    
    function factory() external view returns (address);
    
    function MINIMUM_LIQUIDITY() external pure returns (uint);
}

interface IERC20 {
    function balanceOf(address owner) external view returns (uint);

    function transfer(address to, uint value) external returns (bool);

    function symbol() external view returns (string memory);
    
    function name() external view returns (string memory);

    function decimals() external view returns (uint256);
    
    function approve(address spender, uint value) external returns (bool);
    
    function transferFrom(address from, address to, uint value) external returns (bool);
}

interface IWETH is IERC20 {
    function deposit() external payable;

    function withdraw(uint) external;
}
Ownable.sol 100 lines
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v5.0.0) (access/Ownable.sol)

pragma solidity ^0.8.20;

import {Context} from "../utils/Context.sol";

/**
 * @dev Contract module which provides a basic access control mechanism, where
 * there is an account (an owner) that can be granted exclusive access to
 * specific functions.
 *
 * The initial owner is set to the address provided by the deployer. This can
 * later be changed with {transferOwnership}.
 *
 * This module is used through inheritance. It will make available the modifier
 * `onlyOwner`, which can be applied to your functions to restrict their use to
 * the owner.
 */
abstract contract Ownable is Context {
    address private _owner;

    /**
     * @dev The caller account is not authorized to perform an operation.
     */
    error OwnableUnauthorizedAccount(address account);

    /**
     * @dev The owner is not a valid owner account. (eg. `address(0)`)
     */
    error OwnableInvalidOwner(address owner);

    event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);

    /**
     * @dev Initializes the contract setting the address provided by the deployer as the initial owner.
     */
    constructor(address initialOwner) {
        if (initialOwner == address(0)) {
            revert OwnableInvalidOwner(address(0));
        }
        _transferOwnership(initialOwner);
    }

    /**
     * @dev Throws if called by any account other than the owner.
     */
    modifier onlyOwner() {
        _checkOwner();
        _;
    }

    /**
     * @dev Returns the address of the current owner.
     */
    function owner() public view virtual returns (address) {
        return _owner;
    }

    /**
     * @dev Throws if the sender is not the owner.
     */
    function _checkOwner() internal view virtual {
        if (owner() != _msgSender()) {
            revert OwnableUnauthorizedAccount(_msgSender());
        }
    }

    /**
     * @dev Leaves the contract without owner. It will not be possible to call
     * `onlyOwner` functions. Can only be called by the current owner.
     *
     * NOTE: Renouncing ownership will leave the contract without an owner,
     * thereby disabling any functionality that is only available to the owner.
     */
    function renounceOwnership() public virtual onlyOwner {
        _transferOwnership(address(0));
    }

    /**
     * @dev Transfers ownership of the contract to a new account (`newOwner`).
     * Can only be called by the current owner.
     */
    function transferOwnership(address newOwner) public virtual onlyOwner {
        if (newOwner == address(0)) {
            revert OwnableInvalidOwner(address(0));
        }
        _transferOwnership(newOwner);
    }

    /**
     * @dev Transfers ownership of the contract to a new account (`newOwner`).
     * Internal function without access restriction.
     */
    function _transferOwnership(address newOwner) internal virtual {
        address oldOwner = _owner;
        _owner = newOwner;
        emit OwnershipTransferred(oldOwner, newOwner);
    }
}
Context.sol 28 lines
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v5.0.1) (utils/Context.sol)

pragma solidity ^0.8.20;

/**
 * @dev Provides information about the current execution context, including the
 * sender of the transaction and its data. While these are generally available
 * via msg.sender and msg.data, they should not be accessed in such a direct
 * manner, since when dealing with meta-transactions the account sending and
 * paying for execution may not be the actual sender (as far as an application
 * is concerned).
 *
 * This contract is only required for intermediate, library-like contracts.
 */
abstract contract Context {
    function _msgSender() internal view virtual returns (address) {
        return msg.sender;
    }

    function _msgData() internal view virtual returns (bytes calldata) {
        return msg.data;
    }

    function _contextSuffixLength() internal view virtual returns (uint256) {
        return 0;
    }
}

Read Contract

WETH 0xad5c4648 → address
defaultFee 0x5a6c72d0 → uint256
factory 0xc45a0155 → address
feeReceiver 0xb3f00674 → address
getAmountOut 0x4327e8b5 → uint256
getFee 0xced72f87 → uint256
owner 0x8da5cb5b → address
pancakeV2RouterAddress 0xf8e4b402 → address
sortTokens 0x544caa56 → address, address
tokenAddress 0x9d76ea58 → address

Write Contract 7 functions

These functions modify contract state and require a wallet transaction to execute.

multisendEther 0x5668056d
address target
uint256 tokenvalue
removeERC20 0xa67755c2
address _token
renounceOwnership 0x715018a6
No parameters
sellExactInputSingle 0xcda19cc9
address[] path
uint256 tokenAmt
uint256 amountOutMin
address to
setAddressParams 0xc6e6aebc
uint256 _ind
address newAddr
setUintParams 0xe5c2341a
uint256 _ind
uint256 newUint
transferOwnership 0xf2fde38b
address newOwner

Recent Transactions

No transactions found for this address