Forkchoice Ethereum Mainnet

Address Contract Verified

Address 0xae520A2D207d6B76115B8676C87EE775653f7E51
Balance 0 ETH
Nonce 1
Code Size 8998 bytes
Indexed Transactions 0 (1 on-chain, 1.3% indexed)
External Etherscan · Sourcify

Contract Bytecode

8998 bytes
0x60806040526004361061009f575f3560e01c80638da5cb5b116100635780638da5cb5b1461014e5780638ec1f4ca146101785780639ac2a011146101a2578063ad5c4648146101de578063d5990e4a14610208578063e5711e8b14610224576100a6565b8063099a04e5146100aa5780631e1bff3f146100d25780634c98aaaa146100fa578063507dd32614610116578063567bb8ef14610132576100a6565b366100a657005b5f5ffd5b3480156100b5575f5ffd5b506100d060048036038101906100cb9190611aad565b61024c565b005b3480156100dd575f5ffd5b506100f860048036038101906100f39190611b5b565b61040d565b005b610114600480360381019061010f9190611b99565b6105f6565b005b610130600480360381019061012b9190611b99565b61098c565b005b61014c60048036038101906101479190611b99565b610e94565b005b348015610159575f5ffd5b5061016261122a565b60405161016f9190611c0c565b60405180910390f35b348015610183575f5ffd5b5061018c61124e565b6040516101999190611c34565b60405180910390f35b3480156101ad575f5ffd5b506101c860048036038101906101c39190611c4d565b611254565b6040516101d59190611c87565b60405180910390f35b3480156101e9575f5ffd5b506101f2611271565b6040516101ff9190611c0c565b60405180910390f35b610222600480360381019061021d9190611b99565b611289565b005b34801561022f575f5ffd5b5061024a60048036038101906102459190611ca0565b611791565b005b5f5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146102d1576040517fea8e4eb500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610336576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82146103645781610366565b475b90505f8373ffffffffffffffffffffffffffffffffffffffff168260405161038d90611d1d565b5f6040518083038185875af1925050503d805f81146103c7576040519150601f19603f3d011682016040523d82523d5f602084013e6103cc565b606091505b5050905080610407576040517f90b8ec1800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b50505050565b5f5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610492576040517fea8e4eb500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036104f7576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f60015f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16905081801561054f575080155b1561057257600160025f8282546105669190611d5e565b9250508190555061059d565b8115801561057d5750805b1561059c57600160025f8282546105949190611d91565b925050819055505b5b8160015f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff021916908315150217905550505050565b5f6002541415801561064f575060015f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b15610686576040517fea8e4eb500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f8373ffffffffffffffffffffffffffffffffffffffff166323b872dd3387866040518463ffffffff1660e01b81526004016106c493929190611dc4565b6020604051808303815f875af11580156106e0573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906107049190611e0d565b905080610746576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161073d90611e92565b60405180910390fd5b8473ffffffffffffffffffffffffffffffffffffffff1663022c0d9f835f306040518463ffffffff1660e01b815260040161078393929190611f22565b5f604051808303815f87803b15801561079a575f5ffd5b505af11580156107ac573d5f5f3e3d5ffd5b5050505073c02aaa39b223fe8d0a0e5c4f27ead9083c756cc273ffffffffffffffffffffffffffffffffffffffff16632e1a7d4d836040518263ffffffff1660e01b81526004016107fd9190611c34565b5f604051808303815f87803b158015610814575f5ffd5b505af1158015610826573d5f5f3e3d5ffd5b505050505f3373ffffffffffffffffffffffffffffffffffffffff168360405161084f90611d1d565b5f6040518083038185875af1925050503d805f8114610889576040519150601f19603f3d011682016040523d82523d5f602084013e61088e565b606091505b50509050806108d2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108c990611fb4565b60405180910390fd5b5f341115610984575f4173ffffffffffffffffffffffffffffffffffffffff16346040516108ff90611d1d565b5f6040518083038185875af1925050503d805f8114610939576040519150601f19603f3d011682016040523d82523d5f602084013e61093e565b606091505b5050905080610982576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109799061201c565b60405180910390fd5b505b505050505050565b5f600254141580156109e5575060015f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b15610a1c576040517fea8e4eb500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f8234610a299190611d91565b90508083610a379190611d5e565b3414610a78576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a6f90612084565b60405180910390fd5b5f8311610aba576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ab1906120ec565b60405180910390fd5b73c02aaa39b223fe8d0a0e5c4f27ead9083c756cc273ffffffffffffffffffffffffffffffffffffffff1663d0e30db0846040518263ffffffff1660e01b81526004015f604051808303818588803b158015610b14575f5ffd5b505af1158015610b26573d5f5f3e3d5ffd5b505050505073c02aaa39b223fe8d0a0e5c4f27ead9083c756cc273ffffffffffffffffffffffffffffffffffffffff1663a9059cbb86856040518363ffffffff1660e01b8152600401610b7a92919061210a565b6020604051808303815f875af1158015610b96573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610bba9190611e0d565b610bf9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bf09061217b565b60405180910390fd5b8473ffffffffffffffffffffffffffffffffffffffff1663022c0d9f5f84306040518463ffffffff1660e01b8152600401610c3693929190612199565b5f604051808303815f87803b158015610c4d575f5ffd5b505af1158015610c5f573d5f5f3e3d5ffd5b505050505f8473ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401610c9d9190611c0c565b602060405180830381865afa158015610cb8573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610cdc91906121f5565b90505f8111610d20576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d179061226a565b60405180910390fd5b8473ffffffffffffffffffffffffffffffffffffffff1663a9059cbb33836040518363ffffffff1660e01b8152600401610d5b92919061210a565b6020604051808303815f875af1158015610d77573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610d9b9190611e0d565b610dda576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dd1906122d2565b60405180910390fd5b5f821115610e8c575f4173ffffffffffffffffffffffffffffffffffffffff1683604051610e0790611d1d565b5f6040518083038185875af1925050503d805f8114610e41576040519150601f19603f3d011682016040523d82523d5f602084013e610e46565b606091505b5050905080610e8a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e819061201c565b60405180910390fd5b505b505050505050565b5f60025414158015610eed575060015f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b15610f24576040517fea8e4eb500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f8373ffffffffffffffffffffffffffffffffffffffff166323b872dd3387866040518463ffffffff1660e01b8152600401610f6293929190611dc4565b6020604051808303815f875af1158015610f7e573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610fa29190611e0d565b905080610fe4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fdb90611e92565b60405180910390fd5b8473ffffffffffffffffffffffffffffffffffffffff1663022c0d9f5f84306040518463ffffffff1660e01b815260040161102193929190612199565b5f604051808303815f87803b158015611038575f5ffd5b505af115801561104a573d5f5f3e3d5ffd5b5050505073c02aaa39b223fe8d0a0e5c4f27ead9083c756cc273ffffffffffffffffffffffffffffffffffffffff16632e1a7d4d836040518263ffffffff1660e01b815260040161109b9190611c34565b5f604051808303815f87803b1580156110b2575f5ffd5b505af11580156110c4573d5f5f3e3d5ffd5b505050505f3373ffffffffffffffffffffffffffffffffffffffff16836040516110ed90611d1d565b5f6040518083038185875af1925050503d805f8114611127576040519150601f19603f3d011682016040523d82523d5f602084013e61112c565b606091505b5050905080611170576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161116790611fb4565b60405180910390fd5b5f341115611222575f4173ffffffffffffffffffffffffffffffffffffffff163460405161119d90611d1d565b5f6040518083038185875af1925050503d805f81146111d7576040519150601f19603f3d011682016040523d82523d5f602084013e6111dc565b606091505b5050905080611220576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112179061201c565b60405180910390fd5b505b505050505050565b5f5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60025481565b6001602052805f5260405f205f915054906101000a900460ff1681565b73c02aaa39b223fe8d0a0e5c4f27ead9083c756cc281565b5f600254141580156112e2575060015f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b15611319576040517fea8e4eb500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f82346113269190611d91565b905080836113349190611d5e565b3414611375576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161136c90612084565b60405180910390fd5b5f83116113b7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113ae906120ec565b60405180910390fd5b73c02aaa39b223fe8d0a0e5c4f27ead9083c756cc273ffffffffffffffffffffffffffffffffffffffff1663d0e30db0846040518263ffffffff1660e01b81526004015f604051808303818588803b158015611411575f5ffd5b505af1158015611423573d5f5f3e3d5ffd5b505050505073c02aaa39b223fe8d0a0e5c4f27ead9083c756cc273ffffffffffffffffffffffffffffffffffffffff1663a9059cbb86856040518363ffffffff1660e01b815260040161147792919061210a565b6020604051808303815f875af1158015611493573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906114b79190611e0d565b6114f6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114ed9061217b565b60405180910390fd5b8473ffffffffffffffffffffffffffffffffffffffff1663022c0d9f835f306040518463ffffffff1660e01b815260040161153393929190611f22565b5f604051808303815f87803b15801561154a575f5ffd5b505af115801561155c573d5f5f3e3d5ffd5b505050505f8473ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b815260040161159a9190611c0c565b602060405180830381865afa1580156115b5573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906115d991906121f5565b90505f811161161d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116149061226a565b60405180910390fd5b8473ffffffffffffffffffffffffffffffffffffffff1663a9059cbb33836040518363ffffffff1660e01b815260040161165892919061210a565b6020604051808303815f875af1158015611674573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906116989190611e0d565b6116d7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116ce906122d2565b60405180910390fd5b5f821115611789575f4173ffffffffffffffffffffffffffffffffffffffff168360405161170490611d1d565b5f6040518083038185875af1925050503d805f811461173e576040519150601f19603f3d011682016040523d82523d5f602084013e611743565b606091505b5050905080611787576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161177e9061201c565b60405180910390fd5b505b505050505050565b5f5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611816576040517fea8e4eb500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16148061187b57505f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16145b156118b2576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f8390505f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff83146118e4578261195d565b8173ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b815260040161191d9190611c0c565b602060405180830381865afa158015611938573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061195c91906121f5565b5b90505f8273ffffffffffffffffffffffffffffffffffffffff1663a9059cbb86846040518363ffffffff1660e01b815260040161199b92919061210a565b6020604051808303815f875af11580156119b7573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906119db9190611e0d565b905080611a14576040517f90b8ec1800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b505050505050565b5f5ffd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f611a4982611a20565b9050919050565b611a5981611a3f565b8114611a63575f5ffd5b50565b5f81359050611a7481611a50565b92915050565b5f819050919050565b611a8c81611a7a565b8114611a96575f5ffd5b50565b5f81359050611aa781611a83565b92915050565b5f5f60408385031215611ac357611ac2611a1c565b5b5f611ad085828601611a66565b9250506020611ae185828601611a99565b9150509250929050565b5f611af582611a20565b9050919050565b611b0581611aeb565b8114611b0f575f5ffd5b50565b5f81359050611b2081611afc565b92915050565b5f8115159050919050565b611b3a81611b26565b8114611b44575f5ffd5b50565b5f81359050611b5581611b31565b92915050565b5f5f60408385031215611b7157611b70611a1c565b5b5f611b7e85828601611b12565b9250506020611b8f85828601611b47565b9150509250929050565b5f5f5f5f60808587031215611bb157611bb0611a1c565b5b5f611bbe87828801611b12565b9450506020611bcf87828801611b12565b9350506040611be087828801611a99565b9250506060611bf187828801611a99565b91505092959194509250565b611c0681611aeb565b82525050565b5f602082019050611c1f5f830184611bfd565b92915050565b611c2e81611a7a565b82525050565b5f602082019050611c475f830184611c25565b92915050565b5f60208284031215611c6257611c61611a1c565b5b5f611c6f84828501611b12565b91505092915050565b611c8181611b26565b82525050565b5f602082019050611c9a5f830184611c78565b92915050565b5f5f5f60608486031215611cb757611cb6611a1c565b5b5f611cc486828701611b12565b9350506020611cd586828701611b12565b9250506040611ce686828701611a99565b9150509250925092565b5f81905092915050565b50565b5f611d085f83611cf0565b9150611d1382611cfa565b5f82019050919050565b5f611d2782611cfd565b9150819050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f611d6882611a7a565b9150611d7383611a7a565b9250828201905080821115611d8b57611d8a611d31565b5b92915050565b5f611d9b82611a7a565b9150611da683611a7a565b9250828203905081811115611dbe57611dbd611d31565b5b92915050565b5f606082019050611dd75f830186611bfd565b611de46020830185611bfd565b611df16040830184611c25565b949350505050565b5f81519050611e0781611b31565b92915050565b5f60208284031215611e2257611e21611a1c565b5b5f611e2f84828501611df9565b91505092915050565b5f82825260208201905092915050565b7f5472616e73666572206661696c656400000000000000000000000000000000005f82015250565b5f611e7c600f83611e38565b9150611e8782611e48565b602082019050919050565b5f6020820190508181035f830152611ea981611e70565b9050919050565b5f819050919050565b5f819050919050565b5f611edc611ed7611ed284611eb0565b611eb9565b611a7a565b9050919050565b611eec81611ec2565b82525050565b5f82825260208201905092915050565b5f611f0d5f83611ef2565b9150611f1882611cfa565b5f82019050919050565b5f608082019050611f355f830186611c25565b611f426020830185611ee3565b611f4f6040830184611bfd565b8181036060830152611f6081611f02565b9050949350505050565b7f455448207472616e73666572206661696c6564000000000000000000000000005f82015250565b5f611f9e601383611e38565b9150611fa982611f6a565b602082019050919050565b5f6020820190508181035f830152611fcb81611f92565b9050919050565b7f4272696265206661696c656400000000000000000000000000000000000000005f82015250565b5f612006600c83611e38565b915061201182611fd2565b602082019050919050565b5f6020820190508181035f83015261203381611ffa565b9050919050565b7f426164206d73672e76616c7565000000000000000000000000000000000000005f82015250565b5f61206e600d83611e38565b91506120798261203a565b602082019050919050565b5f6020820190508181035f83015261209b81612062565b9050919050565b7f5a65726f20657468496e000000000000000000000000000000000000000000005f82015250565b5f6120d6600a83611e38565b91506120e1826120a2565b602082019050919050565b5f6020820190508181035f830152612103816120ca565b9050919050565b5f60408201905061211d5f830185611bfd565b61212a6020830184611c25565b9392505050565b7f57455448207472616e73666572206661696c65640000000000000000000000005f82015250565b5f612165601483611e38565b915061217082612131565b602082019050919050565b5f6020820190508181035f83015261219281612159565b9050919050565b5f6080820190506121ac5f830186611ee3565b6121b96020830185611c25565b6121c66040830184611bfd565b81810360608301526121d781611f02565b9050949350505050565b5f815190506121ef81611a83565b92915050565b5f6020828403121561220a57612209611a1c565b5b5f612217848285016121e1565b91505092915050565b7f4e6f20746f6b656e7320726563656976656400000000000000000000000000005f82015250565b5f612254601283611e38565b915061225f82612220565b602082019050919050565b5f6020820190508181035f83015261228181612248565b9050919050565b7f546f6b656e207472616e73666572206661696c656400000000000000000000005f82015250565b5f6122bc601583611e38565b91506122c782612288565b602082019050919050565b5f6020820190508181035f8301526122e9816122b0565b905091905056fea264697066735822122008ba2b128cc6a51221ee07cd36af12af3aac952dc2e0cbfdcf029dbabdc96aa864736f6c634300081f0033

Verified Source Code Full Match

Compiler: v0.8.31+commit.fd3a2265 EVM: osaka Optimization: No
Dealer.sol 183 lines
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.20;

interface IWETH {
    function deposit() external payable;
    function withdraw(uint256) external;
    function transfer(address to, uint256 value) external returns (bool);
}

interface IUniswapV2Pair {
    function swap(uint256 amount0Out, uint256 amount1Out, address to, bytes calldata data) external;
}

interface IERC20 {
    function transferFrom(address from, address to, uint256 amount) external returns (bool);
    function transfer(address to, uint256 amount) external returns (bool);
    function balanceOf(address account) external view returns (uint256);
}

contract Dealer {
    error NotAuthorized();
    error ZeroAddress();
    error TransferFailed();
    
    address public owner;
    mapping(address => bool) public executors;
    uint256 public executorCount;
    
    address public constant WETH = 0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2;
    
    constructor() {
        owner = msg.sender;
    }
    
    receive() external payable {}
    
    modifier onlyOwner() {
        if (msg.sender != owner) revert NotAuthorized();
        _;
    }

    modifier onlyExecutorOrOpen() {
        // If no executor is configured, allow anyone.
        // Once at least one executor is configured, restrict to allowlisted executors.
        if (executorCount != 0 && !executors[msg.sender]) revert NotAuthorized();
        _;
    }

    function setExecutor(address executor, bool allowed) external onlyOwner {
        if (executor == address(0)) revert ZeroAddress();

        bool prev = executors[executor];
        if (allowed && !prev) {
            executorCount += 1;
        } else if (!allowed && prev) {
            executorCount -= 1;
        }
        executors[executor] = allowed;
    }
    
    function rescueETH(address payable to, uint256 amount) external onlyOwner {
        if (to == address(0)) revert ZeroAddress();
        uint256 sendAmount = amount == type(uint256).max ? address(this).balance : amount;
        (bool ok,) = to.call{value: sendAmount}("");
        if (!ok) revert TransferFailed();
    }
    
    function rescueToken(address token, address to, uint256 amount) external onlyOwner {
        if (token == address(0) || to == address(0)) revert ZeroAddress();
        IERC20 tokenContract = IERC20(token);
        uint256 sendAmount = amount == type(uint256).max ? tokenContract.balanceOf(address(this)) : amount;
        bool success = tokenContract.transfer(to, sendAmount);
        if (!success) revert TransferFailed();
    }
    function buyWethToken(
    address pair,
    address token,        // token you want to BUY
    uint256 ethIn,        // ETH to spend (will be wrapped to WETH)
    uint256 tokensOut     // token out you REQUEST (put slippage here)
) external payable onlyExecutorOrOpen {
    // msg.value must cover ethIn + bribe
    uint256 bribe = msg.value - ethIn;
    require(msg.value == ethIn + bribe, "Bad msg.value");
    require(ethIn > 0, "Zero ethIn");

    // Wrap ETH -> WETH
    IWETH(WETH).deposit{value: ethIn}();

    // Send WETH to pair as input
    require(IWETH(WETH).transfer(pair, ethIn), "WETH transfer failed");

    // WETH is token0, token is token1 => amount1Out = tokensOut
    IUniswapV2Pair(pair).swap(0, tokensOut, address(this), "");

    // Send ACTUAL tokens received (not tokensOut)
    uint256 got = IERC20(token).balanceOf(address(this));
    require(got > 0, "No tokens received");
    require(IERC20(token).transfer(msg.sender, got), "Token transfer failed");

    // Bribe coinbase (if any)
    if (bribe > 0) {
        (bool ok,) = block.coinbase.call{value: bribe}("");
        require(ok, "Bribe failed");
    }
}

function buyTokenWeth(
    address pair,
    address token,        // token you want to BUY
    uint256 ethIn,        // ETH to spend (will be wrapped to WETH)
    uint256 tokensOut     // token out you REQUEST (put slippage here)
) external payable onlyExecutorOrOpen {
    uint256 bribe = msg.value - ethIn;
    require(msg.value == ethIn + bribe, "Bad msg.value");
    require(ethIn > 0, "Zero ethIn");
    IWETH(WETH).deposit{value: ethIn}();
    require(IWETH(WETH).transfer(pair, ethIn), "WETH transfer failed");
    // WETH is token1, token is token0 => amount0Out = tokensOut
    IUniswapV2Pair(pair).swap(tokensOut, 0, address(this), "");
    uint256 got = IERC20(token).balanceOf(address(this));
    require(got > 0, "No tokens received");
    require(IERC20(token).transfer(msg.sender, got), "Token transfer failed");
    if (bribe > 0) {
        (bool ok,) = block.coinbase.call{value: bribe}("");
        require(ok, "Bribe failed");
    }
}
    // Sell tokens directly through pair - WETH is token1, token is token0
    function sellTokenWeth(
        address pair,
        address token,
        uint256 tokensIn,
        uint256 wethOut
    ) external payable onlyExecutorOrOpen {
        // Transfer tokens from sender to pair directly
        bool success = IERC20(token).transferFrom(msg.sender, pair, tokensIn);
        require(success, "Transfer failed");
        
        // Call swap on pair (amount0Out = 0, amount1Out = wethOut)
        IUniswapV2Pair(pair).swap(0, wethOut, address(this), "");
        
        // Unwrap WETH to ETH
        IWETH(WETH).withdraw(wethOut);
        
        // Send ETH to sender
        (bool ok,) = msg.sender.call{value: wethOut}("");
        require(ok, "ETH transfer failed");
        
        // Pay coinbase if bribe provided
        if (msg.value > 0) {
            (bool bribeOk,) = block.coinbase.call{value: msg.value}("");
            require(bribeOk, "Bribe failed");
        }
    }
    
    // Sell tokens directly through pair - WETH is token0, token is token1  
    function sellWethToken(
        address pair,
        address token,
        uint256 tokensIn,
        uint256 wethOut
    ) external payable onlyExecutorOrOpen {
        // Transfer tokens from sender to pair directly
        bool success = IERC20(token).transferFrom(msg.sender, pair, tokensIn);
        require(success, "Transfer failed");
        
        // Call swap on pair (amount0Out = wethOut, amount1Out = 0)
        IUniswapV2Pair(pair).swap(wethOut, 0, address(this), "");
        
        // Unwrap WETH to ETH
        IWETH(WETH).withdraw(wethOut);
        
        // Send ETH to sender
        (bool ok,) = msg.sender.call{value: wethOut}("");
        require(ok, "ETH transfer failed");
        
        // Pay coinbase if bribe provided
        if (msg.value > 0) {
            (bool bribeOk,) = block.coinbase.call{value: msg.value}("");
            require(bribeOk, "Bribe failed");
        }
    }
}

Read Contract

WETH 0xad5c4648 → address
executorCount 0x8ec1f4ca → uint256
executors 0x9ac2a011 → bool
owner 0x8da5cb5b → address

Write Contract 7 functions

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

buyTokenWeth 0xd5990e4a
address pair
address token
uint256 ethIn
uint256 tokensOut
buyWethToken 0x507dd326
address pair
address token
uint256 ethIn
uint256 tokensOut
rescueETH 0x099a04e5
address to
uint256 amount
rescueToken 0xe5711e8b
address token
address to
uint256 amount
sellTokenWeth 0x567bb8ef
address pair
address token
uint256 tokensIn
uint256 wethOut
sellWethToken 0x4c98aaaa
address pair
address token
uint256 tokensIn
uint256 wethOut
setExecutor 0x1e1bff3f
address executor
bool allowed

Recent Transactions

This address has 1 on-chain transactions, but only 1.3% of the chain is indexed. Transactions will appear as indexing progresses. View on Etherscan →