Address Contract Verified
Address
0xF96Cb44eA5a5E08b944f922a00d170D40677129A
Balance
0 ETH
Nonce
99
Code Size
7682 bytes
Creator
0x6e7dbd0A...89e8 at tx 0x7a816e82...8ed406
Indexed Transactions
0
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