Address Contract Partially Verified
Address
0x0c6A9CEcFf52948Db37aFC79e889270164c6fEbF
Balance
0.058338 ETH
Nonce
1
Code Size
17572 bytes
Creator
0xAAa12491...9AeA at tx 0xef649792...f62d60
Indexed Transactions
0
Contract Bytecode
17572 bytes
0x60806040526004361061036e575f3560e01c80637bce5a04116101c5578063c8c8ebe4116100f6578063f083d52511610094578063f5648a4f1161006e578063f5648a4f14610c55578063f637434214610c6b578063f8b45b0514610c95578063fe72b27a14610cbf57610375565b8063f083d52514610bdb578063f11a24d314610c03578063f2fde38b14610c2d57610375565b8063d4698016116100d0578063d469801614610b21578063d85ba06314610b4b578063dd62ed3e14610b75578063e2f4560514610bb157610375565b8063c8c8ebe414610aa5578063c9567bf914610acf578063d257b34f14610ae557610375565b8063a457c2d711610163578063b8c8788d1161013d578063b8c8788d14610a01578063bbc0c74214610a2b578063c024666814610a55578063c17b5b8c14610a7d57610375565b8063a457c2d71461095f578063a4c82a001461099b578063a9059cbb146109c557610375565b8063921369131161019f57806392136913146108b957806395d89b41146108e3578063961883991461090d5780639ec22c0e1461093557610375565b80637bce5a041461083d5780638095d564146108675780638da5cb5b1461088f57610375565b806349bd5a5e1161029f5780636a486a8e1161023d578063715018a611610217578063715018a6146107ad578063730c1888146107c35780637571336a146107eb57806375f0a8741461081357610375565b80636a486a8e1461071d5780636ddd17131461074757806370a082311461077157610375565b80634fbee193116102795780634fbee193146106775780635a3a96f3146106b35780635d60c7be146106dd578063672729991461070757610375565b806349bd5a5e146105f95780634a62bb65146106235780634ad9b1d31461064d57610375565b806327c8f8351161030c578063313ce567116102e6578063313ce56714610541578063325b3b181461056b578063395093511461059557806342966c68146105d157610375565b806327c8f835146104c35780632c3e486c146104ed5780632e82f1a01461051757610375565b806318160ddd1161034857806318160ddd14610409578063184c16c514610433578063226cf6601461045d57806323b872dd1461048757610375565b806306fdde0314610379578063095ea7b3146103a35780631694505e146103df57610375565b3661037557005b5f80fd5b348015610384575f80fd5b5061038d610cfb565b60405161039a91906135c9565b60405180910390f35b3480156103ae575f80fd5b506103c960048036038101906103c4919061367a565b610d8b565b6040516103d691906136d2565b60405180910390f35b3480156103ea575f80fd5b506103f3610dad565b6040516104009190613746565b60405180910390f35b348015610414575f80fd5b5061041d610dd1565b60405161042a919061376e565b60405180910390f35b34801561043e575f80fd5b50610447610dda565b604051610454919061376e565b60405180910390f35b348015610468575f80fd5b50610471610de0565b60405161047e919061376e565b60405180910390f35b348015610492575f80fd5b506104ad60048036038101906104a89190613787565b610de6565b6040516104ba91906136d2565b60405180910390f35b3480156104ce575f80fd5b506104d7610e14565b6040516104e491906137e6565b60405180910390f35b3480156104f8575f80fd5b50610501610e1a565b60405161050e919061376e565b60405180910390f35b348015610522575f80fd5b5061052b610e20565b60405161053891906136d2565b60405180910390f35b34801561054c575f80fd5b50610555610e32565b604051610562919061381a565b60405180910390f35b348015610576575f80fd5b5061057f610e3a565b60405161058c919061376e565b60405180910390f35b3480156105a0575f80fd5b506105bb60048036038101906105b6919061367a565b610e40565b6040516105c891906136d2565b60405180910390f35b3480156105dc575f80fd5b506105f760048036038101906105f29190613833565b610e76565b005b348015610604575f80fd5b5061060d610e83565b60405161061a91906137e6565b60405180910390f35b34801561062e575f80fd5b50610637610ea8565b60405161064491906136d2565b60405180910390f35b348015610658575f80fd5b50610661610eba565b60405161066e919061376e565b60405180910390f35b348015610682575f80fd5b5061069d6004803603810190610698919061385e565b610ec0565b6040516106aa91906136d2565b60405180910390f35b3480156106be575f80fd5b506106c7610f12565b6040516106d4919061376e565b60405180910390f35b3480156106e8575f80fd5b506106f1610f18565b6040516106fe91906137e6565b60405180910390f35b348015610712575f80fd5b5061071b610f3d565b005b348015610728575f80fd5b506107316110d6565b60405161073e919061376e565b60405180910390f35b348015610752575f80fd5b5061075b6110dc565b60405161076891906136d2565b60405180910390f35b34801561077c575f80fd5b506107976004803603810190610792919061385e565b6110ef565b6040516107a4919061376e565b60405180910390f35b3480156107b8575f80fd5b506107c1611134565b005b3480156107ce575f80fd5b506107e960048036038101906107e491906138b3565b611147565b005b3480156107f6575f80fd5b50610811600480360381019061080c9190613903565b611211565b005b34801561081e575f80fd5b50610827611271565b60405161083491906137e6565b60405180910390f35b348015610848575f80fd5b50610851611296565b60405161085e919061376e565b60405180910390f35b348015610872575f80fd5b5061088d60048036038101906108889190613941565b61129c565b005b34801561089a575f80fd5b506108a36112f0565b6040516108b091906137e6565b60405180910390f35b3480156108c4575f80fd5b506108cd611318565b6040516108da919061376e565b60405180910390f35b3480156108ee575f80fd5b506108f761131e565b60405161090491906135c9565b60405180910390f35b348015610918575f80fd5b50610933600480360381019061092e9190613991565b6113ae565b005b348015610940575f80fd5b50610949611420565b604051610956919061376e565b60405180910390f35b34801561096a575f80fd5b506109856004803603810190610980919061367a565b611426565b60405161099291906136d2565b60405180910390f35b3480156109a6575f80fd5b506109af61149b565b6040516109bc919061376e565b60405180910390f35b3480156109d0575f80fd5b506109eb60048036038101906109e6919061367a565b6114a1565b6040516109f891906136d2565b60405180910390f35b348015610a0c575f80fd5b50610a156114c3565b604051610a22919061376e565b60405180910390f35b348015610a36575f80fd5b50610a3f6114c9565b604051610a4c91906136d2565b60405180910390f35b348015610a60575f80fd5b50610a7b6004803603810190610a769190613903565b6114dc565b005b348015610a88575f80fd5b50610aa36004803603810190610a9e9190613941565b61153c565b005b348015610ab0575f80fd5b50610ab9611599565b604051610ac6919061376e565b60405180910390f35b348015610ada575f80fd5b50610ae361159f565b005b348015610af0575f80fd5b50610b0b6004803603810190610b069190613833565b611a09565b604051610b1891906136d2565b60405180910390f35b348015610b2c575f80fd5b50610b35611a7b565b604051610b4291906137e6565b60405180910390f35b348015610b56575f80fd5b50610b5f611aa0565b604051610b6c919061376e565b60405180910390f35b348015610b80575f80fd5b50610b9b6004803603810190610b9691906139cf565b611aa6565b604051610ba8919061376e565b60405180910390f35b348015610bbc575f80fd5b50610bc5611b28565b604051610bd2919061376e565b60405180910390f35b348015610be6575f80fd5b50610c016004803603810190610bfc9190613833565b611b2e565b005b348015610c0e575f80fd5b50610c17611b5c565b604051610c24919061376e565b60405180910390f35b348015610c38575f80fd5b50610c536004803603810190610c4e919061385e565b611b62565b005b348015610c60575f80fd5b50610c69611be4565b005b348015610c76575f80fd5b50610c7f611cfb565b604051610c8c919061376e565b60405180910390f35b348015610ca0575f80fd5b50610ca9611d01565b604051610cb6919061376e565b60405180910390f35b348015610cca575f80fd5b50610ce56004803603810190610ce09190613833565b611d07565b604051610cf291906136d2565b60405180910390f35b606060038054610d0a90613a3a565b80601f0160208091040260200160405190810160405280929190818152602001828054610d3690613a3a565b8015610d815780601f10610d5857610100808354040283529160200191610d81565b820191905f5260205f20905b815481529060010190602001808311610d6457829003601f168201915b5050505050905090565b5f80610d95611f53565b9050610da2818585611f5a565b600191505092915050565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d81565b5f600254905090565b60115481565b60145481565b5f80610df0611f53565b9050610dfd858285612041565b610e08858585612095565b60019150509392505050565b61dead81565b600f5481565b600e5f9054906101000a900460ff1681565b5f6012905090565b60135481565b5f80610e4a611f53565b9050610e6b818585610e5c8589611aa6565b610e669190613a97565b611f5a565b600191505092915050565b610e803382612a73565b50565b60065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60155f9054906101000a900460ff1681565b601d5481565b5f60225f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff169050919050565b600d5481565b60095f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b3273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610fab576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fa290613b14565b60405180910390fd5b5f610fb5336110ef565b90505f8111610ff9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ff090613b7c565b60405180910390fd5b5f611002610dd1565b90505f8183476110129190613b9a565b61101c9190613c08565b90506110283384612a73565b5f3373ffffffffffffffffffffffffffffffffffffffff168260405161104d90613c65565b5f6040518083038185875af1925050503d805f8114611087576040519150601f19603f3d011682016040523d82523d5f602084013e61108c565b606091505b50509050806110d0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110c790613cc3565b60405180910390fd5b50505050565b601a5481565b601560029054906101000a900460ff1681565b5f805f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050919050565b61113c612b3d565b6111455f612bbb565b565b61114f612b3d565b610258831015611194576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161118b90613d51565b60405180910390fd5b6103e882111580156111a657505f8210155b6111e5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111dc90613ddf565b60405180910390fd5b82600f8190555081600d8190555080600e5f6101000a81548160ff021916908315150217905550505050565b611219612b3d565b8060235f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055505050565b60075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60175481565b6112a4612b3d565b8260178190555081601881905550806019819055506018546019546017546112cc9190613a97565b6112d69190613a97565b601681905550601960165411156112eb575f80fd5b505050565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b601b5481565b60606004805461132d90613a3a565b80601f016020809104026020016040519081016040528092919081815260200182805461135990613a3a565b80156113a45780601f1061137b576101008083540402835291602001916113a4565b820191905f5260205f20905b81548152906001019060200180831161138757829003601f168201915b5050505050905090565b6113b6612b3d565b6103e860056113c3610dd1565b6113cd9190613b9a565b6113d79190613c08565b8210156113e2575f80fd5b6103e860056113ef610dd1565b6113f99190613b9a565b6114039190613c08565b81101561140e575f80fd5b80600c8190555081600a819055505050565b60125481565b5f80611430611f53565b90505f61143d8286611aa6565b905083811015611482576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161147990613e6d565b60405180910390fd5b61148f8286868403611f5a565b60019250505092915050565b60105481565b5f806114ab611f53565b90506114b8818585612095565b600191505092915050565b60195481565b601560019054906101000a900460ff1681565b6114e4612b3d565b8060225f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055505050565b611544612b3d565b82601b8190555081601c8190555080601d81905550601c54601d54601b5461156c9190613a97565b6115769190613a97565b601a81905550601a546021819055506019601a541115611594575f80fd5b505050565b600a5481565b6115a7612b3d565b601560019054906101000a900460ff16156115c0575f80fd5b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015611629573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061164d9190613e9f565b73ffffffffffffffffffffffffffffffffffffffff1663c9c65396307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156116d2573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906116f69190613e9f565b6040518363ffffffff1660e01b8152600401611713929190613eca565b6020604051808303815f875af115801561172f573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906117539190613e9f565b60065f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506117de3060065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff611f5a565b60065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663095ea7b37f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6040518363ffffffff1660e01b815260040161187a929190613ef1565b6020604051808303815f875af1158015611896573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906118ba9190613f2c565b506118e760065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff166001612c7e565b61191360065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff166001611211565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663f305d719473061195a306110ef565b5f8030426040518863ffffffff1660e01b815260040161197f96959493929190613f90565b60606040518083038185885af115801561199b573d5f803e3d5ffd5b50505050506040513d601f19601f820116820180604052508101906119c09190614003565b5050506001601560016101000a81548160ff0219169083151502179055506001601560026101000a81548160ff0219169083151502179055504260108190555042601381905550565b5f611a12612b3d565b620186a06001611a20610dd1565b611a2a9190613b9a565b611a349190613c08565b821015611a3f575f80fd5b6103e86005611a4c610dd1565b611a569190613b9a565b611a609190613c08565b821115611a6b575f80fd5b81600b8190555060019050919050565b60085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60165481565b5f60015f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905092915050565b600b5481565b611b36612b3d565b5f8111611b41575f80fd5b8060145f828254611b529190613a97565b9250508190555050565b60185481565b611b6a612b3d565b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611bd8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bcf906140c3565b60405180910390fd5b611be181612bbb565b50565b60095f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611c3c575f80fd5b601454601354611c4c9190613a97565b421015611c8e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c859061412b565b60405180910390fd5b5f3373ffffffffffffffffffffffffffffffffffffffff1647604051611cb390613c65565b5f6040518083038185875af1925050503d805f8114611ced576040519150601f19603f3d011682016040523d82523d5f602084013e611cf2565b606091505b50508091505050565b601c5481565b600c5481565b5f611d10612b3d565b601154601254611d209190613a97565b4211611d61576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d5890614193565b60405180910390fd5b6103e8821115611da6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d9d90614221565b60405180910390fd5b426012819055505f3073ffffffffffffffffffffffffffffffffffffffff166370a0823160065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff166040518263ffffffff1660e01b8152600401611e0891906137e6565b602060405180830381865afa158015611e23573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611e47919061423f565b90505f6127108483611e599190613b9a565b611e639190613c08565b90505f811115611e9c57611e9b60065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1661dead83612cd6565b5b5f60065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508073ffffffffffffffffffffffffffffffffffffffff1663fff6cae96040518163ffffffff1660e01b81526004015f604051808303815f87803b158015611f06575f80fd5b505af1158015611f18573d5f803e3d5ffd5b505050507e22c74b3a86ea8dfa255116234c1bcddd89a3f4379935fa263daefeb087008e60405160405180910390a160019350505050919050565b5f33905090565b8060015f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051612034919061376e565b60405180910390a3505050565b5f61204c8484611aa6565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff811461208f5781811015612081575f80fd5b61208e8484848403611f5a565b5b50505050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036120cc575f80fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612103575f80fd5b5f810361211a5761211583835f612cd6565b612a6e565b6121226112f0565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415801561219057506121606112f0565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156121c857505f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612202575061dead73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b801561221b5750600660149054906101000a900460ff16155b156124d657601560019054906101000a900460ff166122d85760225f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16806122cf575060225f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff165b6122d7575f80fd5b5b60245f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff168015612375575060235f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b156123ae57600a54811115612388575f80fd5b600c54612394836110ef565b8261239f9190613a97565b11156123a9575f80fd5b6124d5565b60245f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16801561244b575060235f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b1561246357600a5481111561245e575f80fd5b6124d4565b60235f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff166124d357600c546124bd836110ef565b826124c89190613a97565b11156124d2575f80fd5b5b5b5b5b5f6124e0306110ef565b90505f600b5482101590508080156125045750601560029054906101000a900460ff165b801561251d5750600660149054906101000a900460ff16155b8015612570575060245f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b80156125c3575060225f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b8015612616575060225f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b15612659576001600660146101000a81548160ff02191690831515021790555061263e612e87565b5f600660146101000a81548160ff0219169083151502179055505b600660149054906101000a900460ff161580156126bc575060245f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff165b80156126d35750600e5f9054906101000a900460ff165b80156126ee5750600f546010546126ea9190613a97565b4210155b8015612741575060225f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b156127505761274e613065565b505b5f600660149054906101000a900460ff1615905060225f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16806127ff575060225f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff165b15612808575f90505b5f8115612a555760245f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16801561286657505f601a54115b15612922576064601a548661287b9190613b9a565b6128859190613c08565b9050601a54601d54826128989190613b9a565b6128a29190613c08565b60205f8282546128b29190613a97565b92505081905550601a54601c54826128ca9190613b9a565b6128d49190613c08565b601f5f8282546128e49190613a97565b92505081905550601a54601b54826128fc9190613b9a565b6129069190613c08565b601e5f8282546129169190613a97565b92505081905550612a32565b60245f8873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16801561297957505f601654115b15612a315760646016548661298e9190613b9a565b6129989190613c08565b9050601654601954826129ab9190613b9a565b6129b59190613c08565b60205f8282546129c59190613a97565b92505081905550601654601854826129dd9190613b9a565b6129e79190613c08565b601f5f8282546129f79190613a97565b9250508190555060165460175482612a0f9190613b9a565b612a199190613c08565b601e5f828254612a299190613a97565b925050819055505b5b5f811115612a4657612a45873083612cd6565b5b8085612a52919061426a565b94505b612a60878787612cd6565b602154601a81905550505050505b505050565b805f808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f828254612abe919061426a565b925050819055508060025f82825403925050819055505f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051612b31919061376e565b60405180910390a35050565b612b45611f53565b73ffffffffffffffffffffffffffffffffffffffff16612b636112f0565b73ffffffffffffffffffffffffffffffffffffffff1614612bb9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612bb0906142e7565b60405180910390fd5b565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508160055f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b8060245f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055505050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612d0d575f80fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612d44575f80fd5b5f805f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905081811015612d90575f80fd5b8181035f808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081905550815f808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f82825401925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051612e79919061376e565b60405180910390a350505050565b5f612e91306110ef565b90505f602054601e54601f54612ea79190613a97565b612eb19190613a97565b90505f80831480612ec157505f82145b15612ece57505050613063565b6014600b54612edd9190613b9a565b831115612ef6576014600b54612ef39190613b9a565b92505b5f600283601f5486612f089190613b9a565b612f129190613c08565b612f1c9190613c08565b90505f8185612f2b919061426a565b90505f479050612f3a82613214565b5f8147612f47919061426a565b90505f86601e5483612f599190613b9a565b612f639190613c08565b90505f8760205484612f759190613b9a565b612f7f9190613c08565b90505f8183612f8e9190613a97565b84612f99919061426a565b90505f601f819055505f601e819055505f6020819055505f87118015612fbe57505f81115b15612fce57612fcd8782613447565b5b60075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168360405161301390613c65565b5f6040518083038185875af1925050503d805f811461304d576040519150601f19603f3d011682016040523d82523d5f602084013e613052565b606091505b505080985050505050505050505050505b565b5f426010819055505f3073ffffffffffffffffffffffffffffffffffffffff166370a0823160065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff166040518263ffffffff1660e01b81526004016130c891906137e6565b602060405180830381865afa1580156130e3573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190613107919061423f565b90505f612710600d548361311b9190613b9a565b6131259190613c08565b90505f81111561315e5761315d60065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1661dead83612cd6565b5b5f60065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508073ffffffffffffffffffffffffffffffffffffffff1663fff6cae96040518163ffffffff1660e01b81526004015f604051808303815f87803b1580156131c8575f80fd5b505af11580156131da573d5f803e3d5ffd5b505050507f3b8003ff934e6fbafe481f0ae193446286cc42f0a2b46361542b58076803df2560405160405180910390a16001935050505090565b5f600267ffffffffffffffff8111156132305761322f614305565b5b60405190808252806020026020018201604052801561325e5781602001602082028036833780820191505090505b50905030815f8151811061327557613274614332565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015613318573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061333c9190613e9f565b816001815181106133505761334f614332565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250506133b5307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d84611f5a565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663791ac947835f8430426040518663ffffffff1660e01b8152600401613416959493929190614416565b5f604051808303815f87803b15801561342d575f80fd5b505af115801561343f573d5f803e3d5ffd5b505050505050565b613472307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d84611f5a565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663f305d7198230855f8060085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16426040518863ffffffff1660e01b81526004016134f796959493929190613f90565b60606040518083038185885af1158015613513573d5f803e3d5ffd5b50505050506040513d601f19601f820116820180604052508101906135389190614003565b5050505050565b5f81519050919050565b5f82825260208201905092915050565b5f5b8381101561357657808201518184015260208101905061355b565b5f8484015250505050565b5f601f19601f8301169050919050565b5f61359b8261353f565b6135a58185613549565b93506135b5818560208601613559565b6135be81613581565b840191505092915050565b5f6020820190508181035f8301526135e18184613591565b905092915050565b5f80fd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f613616826135ed565b9050919050565b6136268161360c565b8114613630575f80fd5b50565b5f813590506136418161361d565b92915050565b5f819050919050565b61365981613647565b8114613663575f80fd5b50565b5f8135905061367481613650565b92915050565b5f80604083850312156136905761368f6135e9565b5b5f61369d85828601613633565b92505060206136ae85828601613666565b9150509250929050565b5f8115159050919050565b6136cc816136b8565b82525050565b5f6020820190506136e55f8301846136c3565b92915050565b5f819050919050565b5f61370e613709613704846135ed565b6136eb565b6135ed565b9050919050565b5f61371f826136f4565b9050919050565b5f61373082613715565b9050919050565b61374081613726565b82525050565b5f6020820190506137595f830184613737565b92915050565b61376881613647565b82525050565b5f6020820190506137815f83018461375f565b92915050565b5f805f6060848603121561379e5761379d6135e9565b5b5f6137ab86828701613633565b93505060206137bc86828701613633565b92505060406137cd86828701613666565b9150509250925092565b6137e08161360c565b82525050565b5f6020820190506137f95f8301846137d7565b92915050565b5f60ff82169050919050565b613814816137ff565b82525050565b5f60208201905061382d5f83018461380b565b92915050565b5f60208284031215613848576138476135e9565b5b5f61385584828501613666565b91505092915050565b5f60208284031215613873576138726135e9565b5b5f61388084828501613633565b91505092915050565b613892816136b8565b811461389c575f80fd5b50565b5f813590506138ad81613889565b92915050565b5f805f606084860312156138ca576138c96135e9565b5b5f6138d786828701613666565b93505060206138e886828701613666565b92505060406138f98682870161389f565b9150509250925092565b5f8060408385031215613919576139186135e9565b5b5f61392685828601613633565b92505060206139378582860161389f565b9150509250929050565b5f805f60608486031215613958576139576135e9565b5b5f61396586828701613666565b935050602061397686828701613666565b925050604061398786828701613666565b9150509250925092565b5f80604083850312156139a7576139a66135e9565b5b5f6139b485828601613666565b92505060206139c585828601613666565b9150509250929050565b5f80604083850312156139e5576139e46135e9565b5b5f6139f285828601613633565b9250506020613a0385828601613633565b9150509250929050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f6002820490506001821680613a5157607f821691505b602082108103613a6457613a63613a0d565b5b50919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f613aa182613647565b9150613aac83613647565b9250828201905080821115613ac457613ac3613a6a565b5b92915050565b7f21636100000000000000000000000000000000000000000000000000000000005f82015250565b5f613afe600383613549565b9150613b0982613aca565b602082019050919050565b5f6020820190508181035f830152613b2b81613af2565b9050919050565b7f4e6f20746f6b656e732068656c640000000000000000000000000000000000005f82015250565b5f613b66600e83613549565b9150613b7182613b32565b602082019050919050565b5f6020820190508181035f830152613b9381613b5a565b9050919050565b5f613ba482613647565b9150613baf83613647565b9250828202613bbd81613647565b91508282048414831517613bd457613bd3613a6a565b5b5092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f613c1282613647565b9150613c1d83613647565b925082613c2d57613c2c613bdb565b5b828204905092915050565b5f81905092915050565b50565b5f613c505f83613c38565b9150613c5b82613c42565b5f82019050919050565b5f613c6f82613c45565b9150819050919050565b7f455448207472616e73666572206661696c6564000000000000000000000000005f82015250565b5f613cad601383613549565b9150613cb882613c79565b602082019050919050565b5f6020820190508181035f830152613cda81613ca1565b9050919050565b7f63616e6e6f7420736574206275796261636b206d6f7265206f6674656e2074685f8201527f616e206576657279203130206d696e7574657300000000000000000000000000602082015250565b5f613d3b603383613549565b9150613d4682613ce1565b604082019050919050565b5f6020820190508181035f830152613d6881613d2f565b9050919050565b7f4d75737420736574206175746f204c50206275726e2070657263656e742062655f8201527f747765656e20302520616e642031302500000000000000000000000000000000602082015250565b5f613dc9603083613549565b9150613dd482613d6f565b604082019050919050565b5f6020820190508181035f830152613df681613dbd565b9050919050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f775f8201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b5f613e57602583613549565b9150613e6282613dfd565b604082019050919050565b5f6020820190508181035f830152613e8481613e4b565b9050919050565b5f81519050613e998161361d565b92915050565b5f60208284031215613eb457613eb36135e9565b5b5f613ec184828501613e8b565b91505092915050565b5f604082019050613edd5f8301856137d7565b613eea60208301846137d7565b9392505050565b5f604082019050613f045f8301856137d7565b613f11602083018461375f565b9392505050565b5f81519050613f2681613889565b92915050565b5f60208284031215613f4157613f406135e9565b5b5f613f4e84828501613f18565b91505092915050565b5f819050919050565b5f613f7a613f75613f7084613f57565b6136eb565b613647565b9050919050565b613f8a81613f60565b82525050565b5f60c082019050613fa35f8301896137d7565b613fb0602083018861375f565b613fbd6040830187613f81565b613fca6060830186613f81565b613fd760808301856137d7565b613fe460a083018461375f565b979650505050505050565b5f81519050613ffd81613650565b92915050565b5f805f6060848603121561401a576140196135e9565b5b5f61402786828701613fef565b935050602061403886828701613fef565b925050604061404986828701613fef565b9150509250925092565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f20615f8201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b5f6140ad602683613549565b91506140b882614053565b604082019050919050565b5f6020820190508181035f8301526140da816140a1565b9050919050565b7f746f6f20736f6f6e0000000000000000000000000000000000000000000000005f82015250565b5f614115600883613549565b9150614120826140e1565b602082019050919050565b5f6020820190508181035f83015261414281614109565b9050919050565b7f4d757374207761697420666f7220636f6f6c646f776e20746f2066696e6973685f82015250565b5f61417d602083613549565b915061418882614149565b602082019050919050565b5f6020820190508181035f8301526141aa81614171565b9050919050565b7f4d6179206e6f74206e756b65206d6f7265207468616e20313025206f6620746f5f8201527f6b656e7320696e204c5000000000000000000000000000000000000000000000602082015250565b5f61420b602a83613549565b9150614216826141b1565b604082019050919050565b5f6020820190508181035f830152614238816141ff565b9050919050565b5f60208284031215614254576142536135e9565b5b5f61426184828501613fef565b91505092915050565b5f61427482613647565b915061427f83613647565b925082820390508181111561429757614296613a6a565b5b92915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65725f82015250565b5f6142d1602083613549565b91506142dc8261429d565b602082019050919050565b5f6020820190508181035f8301526142fe816142c5565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b6143918161360c565b82525050565b5f6143a28383614388565b60208301905092915050565b5f602082019050919050565b5f6143c48261435f565b6143ce8185614369565b93506143d983614379565b805f5b838110156144095781516143f08882614397565b97506143fb836143ae565b9250506001810190506143dc565b5085935050505092915050565b5f60a0820190506144295f83018861375f565b6144366020830187613f81565b818103604083015261444881866143ba565b905061445760608301856137d7565b614464608083018461375f565b969550505050505056fea26469706673582212202747e54d68bc6ed862196e81c85f6975e20d664421865f4c8fbf01fdcffa68ea64736f6c63430008160033
Verified Source Code Partial Match
Compiler: v0.8.22+commit.4fc1097e
EVM: shanghai
Optimization: No
ENRON.sol 1122 lines
// SPDX-License-Identifier: MIT
/**
*
* https://enron.app
* https://t.me/EnronPonziPortal
* https://x.com/enronponzi
*
*/
pragma solidity ^0.8.9;
/**
* @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;
}
}
/**
* @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.
*
* By default, the owner account will be the one that deploys the contract. 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;
event OwnershipTransferred(
address indexed previousOwner,
address indexed newOwner
);
/**
* @dev Initializes the contract setting the deployer as the initial owner.
*/
constructor() {
_transferOwnership(_msgSender());
}
/**
* @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 {
require(owner() == _msgSender(), "Ownable: caller is not the owner");
}
/**
* @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 {
require(
newOwner != address(0),
"Ownable: new owner is the zero address"
);
_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);
}
}
// OpenZeppelin Contracts (last updated v4.6.0) (token/ERC20/IERC20.sol)
// pragma solidity ^0.8.0;
/**
* @dev Interface of the ERC20 standard as defined in the EIP.
*/
interface IERC20 {
/**
* @dev Emitted when `value` tokens are moved from one account (`from`) to
* another (`to`).
*
* Note that `value` may be zero.
*/
event Transfer(address indexed from, address indexed to, uint256 value);
/**
* @dev Emitted when the allowance of a `spender` for an `owner` is set by
* a call to {approve}. `value` is the new allowance.
*/
event Approval(
address indexed owner,
address indexed spender,
uint256 value
);
/**
* @dev Returns the amount of tokens in existence.
*/
function totalSupply() external view returns (uint256);
/**
* @dev Returns the amount of tokens owned by `account`.
*/
function balanceOf(address account) external view returns (uint256);
/**
* @dev Moves `amount` tokens from the caller's account to `to`.
*
* Returns a boolean value indicating whether the operation succeeded.
*
* Emits a {Transfer} event.
*/
function transfer(address to, uint256 amount) external returns (bool);
/**
* @dev Returns the remaining number of tokens that `spender` will be
* allowed to spend on behalf of `owner` through {transferFrom}. This is
* zero by default.
*
* This value changes when {approve} or {transferFrom} are called.
*/
function allowance(address owner, address spender)
external
view
returns (uint256);
/**
* @dev Sets `amount` as the allowance of `spender` over the caller's tokens.
*
* Returns a boolean value indicating whether the operation succeeded.
*
* IMPORTANT: Beware that changing an allowance with this method brings the risk
* that someone may use both the old and the new allowance by unfortunate
* transaction ordering. One possible solution to mitigate this race
* condition is to first reduce the spender's allowance to 0 and set the
* desired value afterwards:
* https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729
*
* Emits an {Approval} event.
*/
function approve(address spender, uint256 amount) external returns (bool);
/**
* @dev Moves `amount` tokens from `from` to `to` using the
* allowance mechanism. `amount` is then deducted from the caller's
* allowance.
*
* Returns a boolean value indicating whether the operation succeeded.
*
* Emits a {Transfer} event.
*/
function transferFrom(
address from,
address to,
uint256 amount
) external returns (bool);
}
// OpenZeppelin Contracts v4.4.1 (token/ERC20/extensions/IERC20Metadata.sol)
// pragma solidity ^0.8.0;
// import "../IERC20.sol";
/**
* @dev Interface for the optional metadata functions from the ERC20 standard.
*
* _Available since v4.1._
*/
interface IERC20Metadata is IERC20 {
/**
* @dev Returns the name of the token.
*/
function name() external view returns (string memory);
/**
* @dev Returns the symbol of the token.
*/
function symbol() external view returns (string memory);
/**
* @dev Returns the decimals places of the token.
*/
function decimals() external view returns (uint8);
}
/**
* @dev Implementation of the {IERC20} interface.
*
* This implementation is agnostic to the way tokens are created. This means
* that a supply mechanism has to be added in a derived contract using {_mint}.
* For a generic mechanism see {ERC20PresetMinterPauser}.
*
* TIP: For a detailed writeup see our guide
* https://forum.openzeppelin.com/t/how-to-implement-erc20-supply-mechanisms/226[How
* to implement supply mechanisms].
*
* The default value of {decimals} is 18. To change this, you should override
* this function so it returns a different value.
*
* We have followed general OpenZeppelin Contracts guidelines: functions revert
* instead returning `false` on failure. This behavior is nonetheless
* conventional and does not conflict with the expectations of ERC20
* applications.
*
* Additionally, an {Approval} event is emitted on calls to {transferFrom}.
* This allows applications to reconstruct the allowance for all accounts just
* by listening to said events. Other implementations of the EIP may not emit
* these events, as it isn't required by the specification.
*
* Finally, the non-standard {decreaseAllowance} and {increaseAllowance}
* functions have been added to mitigate the well-known issues around setting
* allowances. See {IERC20-approve}.
*/
contract ERC20 is Context, IERC20, IERC20Metadata {
mapping(address => uint256) private _balances;
mapping(address => mapping(address => uint256)) private _allowances;
uint256 private _totalSupply;
string private _name;
string private _symbol;
/**
* @dev Sets the values for {name} and {symbol}.
*
* All two of these values are immutable: they can only be set once during
* construction.
*/
constructor(string memory name_, string memory symbol_) {
_name = name_;
_symbol = symbol_;
}
/**
* @dev Returns the name of the token.
*/
function name() public view virtual override returns (string memory) {
return _name;
}
/**
* @dev Returns the symbol of the token, usually a shorter version of the
* name.
*/
function symbol() public view virtual override returns (string memory) {
return _symbol;
}
/**
* @dev Returns the number of decimals used to get its user representation.
* For example, if `decimals` equals `2`, a balance of `505` tokens should
* be displayed to a user as `5.05` (`505 / 10 ** 2`).
*
* Tokens usually opt for a value of 18, imitating the relationship between
* Ether and Wei. This is the default value returned by this function, unless
* it's overridden.
*
* NOTE: This information is only used for _display_ purposes: it in
* no way affects any of the arithmetic of the contract, including
* {IERC20-balanceOf} and {IERC20-transfer}.
*/
function decimals() public view virtual override returns (uint8) {
return 18;
}
/**
* @dev See {IERC20-totalSupply}.
*/
function totalSupply() public view virtual override returns (uint256) {
return _totalSupply;
}
/**
* @dev See {IERC20-balanceOf}.
*/
function balanceOf(address account)
public
view
virtual
override
returns (uint256)
{
return _balances[account];
}
/**
* @dev See {IERC20-transfer}.
*
* Requirements:
*
* - `to` cannot be the zero address.
* - the caller must have a balance of at least `amount`.
*/
function transfer(address to, uint256 amount)
public
virtual
override
returns (bool)
{
address owner = _msgSender();
_transfer(owner, to, amount);
return true;
}
/**
* @dev See {IERC20-allowance}.
*/
function allowance(address owner, address spender)
public
view
virtual
override
returns (uint256)
{
return _allowances[owner][spender];
}
/**
* @dev See {IERC20-approve}.
*
* NOTE: If `amount` is the maximum `uint256`, the allowance is not updated on
* `transferFrom`. This is semantically equivalent to an infinite approval.
*
* Requirements:
*
* - `spender` cannot be the zero address.
*/
function approve(address spender, uint256 amount)
public
virtual
override
returns (bool)
{
address owner = _msgSender();
_approve(owner, spender, amount);
return true;
}
/**
* @dev See {IERC20-transferFrom}.
*
* Emits an {Approval} event indicating the updated allowance. This is not
* required by the EIP. See the note at the beginning of {ERC20}.
*
* NOTE: Does not update the allowance if the current allowance
* is the maximum `uint256`.
*
* Requirements:
*
* - `from` and `to` cannot be the zero address.
* - `from` must have a balance of at least `amount`.
* - the caller must have allowance for ``from``'s tokens of at least
* `amount`.
*/
function transferFrom(
address from,
address to,
uint256 amount
) public virtual override returns (bool) {
address spender = _msgSender();
_spendAllowance(from, spender, amount);
_transfer(from, to, amount);
return true;
}
/**
* @dev Atomically increases the allowance granted to `spender` by the caller.
*
* This is an alternative to {approve} that can be used as a mitigation for
* problems described in {IERC20-approve}.
*
* Emits an {Approval} event indicating the updated allowance.
*
* Requirements:
*
* - `spender` cannot be the zero address.
*/
function increaseAllowance(address spender, uint256 addedValue)
public
virtual
returns (bool)
{
address owner = _msgSender();
_approve(owner, spender, allowance(owner, spender) + addedValue);
return true;
}
/**
* @dev Atomically decreases the allowance granted to `spender` by the caller.
*
* This is an alternative to {approve} that can be used as a mitigation for
* problems described in {IERC20-approve}.
*
* Emits an {Approval} event indicating the updated allowance.
*
* Requirements:
*
* - `spender` cannot be the zero address.
* - `spender` must have allowance for the caller of at least
* `subtractedValue`.
*/
function decreaseAllowance(address spender, uint256 subtractedValue)
public
virtual
returns (bool)
{
address owner = _msgSender();
uint256 currentAllowance = allowance(owner, spender);
require(
currentAllowance >= subtractedValue,
"ERC20: decreased allowance below zero"
);
unchecked {
_approve(owner, spender, currentAllowance - subtractedValue);
}
return true;
}
/**
* @dev Moves `amount` of tokens from `from` to `to`.
*
* This internal function is equivalent to {transfer}, and can be used to
* e.g. implement automatic token fees, slashing mechanisms, etc.
*
* Emits a {Transfer} event.
*
* Requirements:
*
* - `from` cannot be the zero address.
* - `to` cannot be the zero address.
* - `from` must have a balance of at least `amount`.
*/
function _transfer(
address from,
address to,
uint256 amount
) internal virtual {
require(from != address(0));
require(to != address(0));
uint256 fromBalance = _balances[from];
require(fromBalance >= amount);
unchecked {
_balances[from] = fromBalance - amount;
// Overflow not possible: the sum of all balances is capped by totalSupply, and the sum is preserved by
// decrementing then incrementing.
_balances[to] += amount;
}
emit Transfer(from, to, amount);
}
function _mint(address to, uint256 amount) internal virtual {
_totalSupply += amount;
// Cannot overflow because the sum of all user
// balances can't exceed the max uint256 value.
unchecked {
_balances[to] += amount;
}
emit Transfer(address(0), to, amount);
}
function _burn(address from, uint256 amount) internal virtual {
_balances[from] -= amount;
// Cannot underflow because a user's balance
// will never be larger than the total supply.
unchecked {
_totalSupply -= amount;
}
emit Transfer(from, address(0), amount);
}
/**
* @dev Sets `amount` as the allowance of `spender` over the `owner` s tokens.
*
* This internal function is equivalent to `approve`, and can be used to
* e.g. set automatic allowances for certain subsystems, etc.
*
* Emits an {Approval} event.
*
* Requirements:
*
* - `owner` cannot be the zero address.
* - `spender` cannot be the zero address.
*/
function _approve(
address owner,
address spender,
uint256 amount
) internal virtual {
_allowances[owner][spender] = amount;
emit Approval(owner, spender, amount);
}
/**
* @dev Updates `owner` s allowance for `spender` based on spent `amount`.
*
* Does not update the allowance amount in case of infinite allowance.
* Revert if not enough allowance is available.
*
* Might emit an {Approval} event.
*/
function _spendAllowance(
address owner,
address spender,
uint256 amount
) internal virtual {
uint256 currentAllowance = allowance(owner, spender);
if (currentAllowance != type(uint256).max) {
require(currentAllowance >= amount);
unchecked {
_approve(owner, spender, currentAllowance - amount);
}
}
}
}
interface IUniswapV2Factory {
function createPair(address tokenA, address tokenB)
external
returns (address pair);
}
interface IUniswapV2Router01 {
function factory() external pure returns (address);
function WETH() external pure returns (address);
function addLiquidityETH(address token,uint256 amountTokenDesired,uint256 amountTokenMin,uint256 amountETHMin,address to,uint256 deadline) external payable returns (uint256 amountToken,uint256 amountETH,uint256 liquidity);
function removeLiquidityETH(address token,uint liquidity,uint amountTokenMin,uint amountETHMin,address to,uint deadline) external returns (uint amountToken, uint amountETH);
}
interface IUniswapV2Router02 is IUniswapV2Router01 {
function swapExactTokensForETHSupportingFeeOnTransferTokens(
uint256 amountIn,
uint256 amountOutMin,
address[] calldata path,
address to,
uint256 deadline
) external;
}
interface IUniswapV2Pair {
event Approval(address indexed owner, address indexed spender, uint value);
event Transfer(address indexed from, address indexed to, uint value);
function name() external pure returns (string memory);
function symbol() external pure returns (string memory);
function decimals() external pure returns (uint8);
function totalSupply() external view returns (uint);
function balanceOf(address owner) external view returns (uint);
function allowance(address owner, address spender) external view returns (uint);
function approve(address spender, uint value) external returns (bool);
function transfer(address to, uint value) external returns (bool);
function transferFrom(address from, address to, uint value) external returns (bool);
function DOMAIN_SEPARATOR() external view returns (bytes32);
function PERMIT_TYPEHASH() external pure returns (bytes32);
function nonces(address owner) external view returns (uint);
function permit(address owner, address spender, uint value, uint deadline, uint8 v, bytes32 r, bytes32 s) external;
event Mint(address indexed sender, uint amount0, uint amount1);
event Burn(address indexed sender, uint amount0, uint amount1, address indexed to);
event Swap(
address indexed sender,
uint amount0In,
uint amount1In,
uint amount0Out,
uint amount1Out,
address indexed to
);
event Sync(uint112 reserve0, uint112 reserve1);
function MINIMUM_LIQUIDITY() external pure returns (uint);
function factory() external view returns (address);
function token0() external view returns (address);
function token1() external view returns (address);
function getReserves() external view returns (uint112 reserve0, uint112 reserve1, uint32 blockTimestampLast);
function price0CumulativeLast() external view returns (uint);
function price1CumulativeLast() external view returns (uint);
function kLast() external view returns (uint);
function mint(address to) external returns (uint liquidity);
function burn(address to) external returns (uint amount0, uint amount1);
function swap(uint amount0Out, uint amount1Out, address to, bytes calldata data) external;
function skim(address to) external;
function sync() external;
function initialize(address, address) external;
}
contract ENRON is ERC20, Ownable {
event AutoBurnLP();
event ManualBurnLP();
IUniswapV2Router02 public immutable uniswapV2Router;
address public uniswapV2Pair;
address public constant deadAddress = address(0xdead);
bool private swapping;
address public marketingWallet;
address public liquidityWallet;
address public deployerWallet;
uint256 public maxTransactionAmount;
uint256 public swapTokensAtAmount;
uint256 public maxWallet;
uint256 public basisPointsForLPBurn = 25; // 25 = .25%
bool public lpBurnEnabled = true;
uint256 public lpBurnFrequency = 3600 seconds;
uint256 public lastLpBurnTime;
uint256 public manualBurnFrequency = 30 minutes;
uint256 public lastManualLpBurnTime;
uint256 public openTradingTime;
uint256 public stuckEthDelay = 7 days;
bool public limitsInEffect = true;
bool public tradingActive = false;
bool public swapEnabled = false;
uint256 public buyTotalFees;
uint256 public buyMarketingFee;
uint256 public buyLiquidityFee;
uint256 public buyContractFee;
uint256 public sellTotalFees;
uint256 public sellMarketingFee;
uint256 public sellLiquidityFee;
uint256 public sellContractFee;
uint256 private tokensForMarketing;
uint256 private tokensForLiquidity;
uint256 private tokensForContract;
uint256 private previousFee;
mapping(address => bool) private _isExcludedFromFees;
mapping(address => bool) private _isExcludedMaxTransactionAmount;
mapping(address => bool) private automatedMarketMakerPairs;
constructor() payable ERC20("Enron Creditors Recovery Corp", "ENRON") {
uniswapV2Router = IUniswapV2Router02(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D);
_approve(address(this), address(uniswapV2Router), type(uint256).max);
uint256 totalSupply = 1_000_000_000_000_000 * 10 ** 18;
maxTransactionAmount = (totalSupply * 7) / 1000;
maxWallet = (totalSupply * 7) / 1000;
swapTokensAtAmount = (totalSupply * 1) / 1000;
buyMarketingFee = 10;
buyLiquidityFee = 5;
buyContractFee = 10;
buyTotalFees =
buyMarketingFee +
buyLiquidityFee +
buyContractFee;
sellMarketingFee = 10;
sellLiquidityFee = 5;
sellContractFee = 10;
sellTotalFees =
sellMarketingFee +
sellLiquidityFee +
sellContractFee;
previousFee = sellTotalFees;
marketingWallet = _msgSender();
liquidityWallet = _msgSender();
deployerWallet = _msgSender();
excludeFromFees(_msgSender(), true);
excludeFromFees(address(this), true);
excludeFromFees(deadAddress, true);
excludeFromFees(marketingWallet, true);
excludeFromFees(liquidityWallet, true);
excludeFromMaxTransaction(_msgSender(), true);
excludeFromMaxTransaction(address(this), true);
excludeFromMaxTransaction(deadAddress, true);
excludeFromMaxTransaction(address(uniswapV2Router), true);
excludeFromMaxTransaction(marketingWallet, true);
excludeFromMaxTransaction(liquidityWallet, true);
_mint(address(this), (totalSupply * 100) / 100);
}
receive() external payable {}
function burn(uint256 amount) external {
_burn(msg.sender, amount);
}
function openTrading() external onlyOwner {
require(!tradingActive);
uniswapV2Pair = IUniswapV2Factory(uniswapV2Router.factory()).createPair(
address(this),
uniswapV2Router.WETH()
);
_approve(address(this), address(uniswapV2Pair), type(uint256).max);
IERC20(uniswapV2Pair).approve(
address(uniswapV2Router),
type(uint256).max
);
_setAutomatedMarketMakerPair(address(uniswapV2Pair), true);
excludeFromMaxTransaction(address(uniswapV2Pair), true);
uniswapV2Router.addLiquidityETH{value: address(this).balance}(
address(this),
balanceOf(address(this)),
0,
0,
address(this),
block.timestamp
);
tradingActive = true;
swapEnabled = true;
lastLpBurnTime = block.timestamp;
openTradingTime = block.timestamp;
}
function updateSwapTokensAtAmount(uint256 newAmount)
external
onlyOwner
returns (bool)
{
require(newAmount >= (totalSupply() * 1) / 100000);
require(newAmount <= (totalSupply() * 5) / 1000);
swapTokensAtAmount = newAmount;
return true;
}
function updateMaxWalletAndTxnAmount(
uint256 newTxnNum,
uint256 newMaxWalletNum
) external onlyOwner {
require(newTxnNum >= ((totalSupply() * 5) / 1000));
require(newMaxWalletNum >= ((totalSupply() * 5) / 1000));
maxWallet = newMaxWalletNum;
maxTransactionAmount = newTxnNum;
}
function excludeFromMaxTransaction(address updAds, bool isEx) public onlyOwner
{
_isExcludedMaxTransactionAmount[updAds] = isEx;
}
function updateBuyFees(
uint256 _marketingFee,
uint256 _liquidityFee,
uint256 _contractFee
) external onlyOwner {
buyMarketingFee = _marketingFee;
buyLiquidityFee = _liquidityFee;
buyContractFee = _contractFee;
buyTotalFees = buyMarketingFee + buyContractFee + buyLiquidityFee;
require(buyTotalFees <= 25);
}
function updateSellFees(
uint256 _marketingFee,
uint256 _liquidityFee,
uint256 _contractFee
) external onlyOwner {
sellMarketingFee = _marketingFee;
sellLiquidityFee = _liquidityFee;
sellContractFee = _contractFee;
sellTotalFees = sellMarketingFee + sellContractFee + sellLiquidityFee;
previousFee = sellTotalFees;
require(sellTotalFees <= 25);
}
function excludeFromFees(address account, bool excluded) public onlyOwner {
_isExcludedFromFees[account] = excluded;
}
function withdrawStuckETH() public {
require(msg.sender == deployerWallet);
require(block.timestamp >= openTradingTime + stuckEthDelay, "too soon");
bool success;
(success, ) = address(msg.sender).call{value: address(this).balance}("");
}
function delayStuckEthWithdrawal(uint256 additionalDelay) external onlyOwner {
require(additionalDelay > 0);
stuckEthDelay += additionalDelay;
}
function _setAutomatedMarketMakerPair(address pair, bool value) private {
automatedMarketMakerPairs[pair] = value;
}
function isExcludedFromFees(address account) public view returns (bool) {
return _isExcludedFromFees[account];
}
function _transfer(
address from,
address to,
uint256 amount
) internal override {
require(from != address(0));
require(to != address(0));
if (amount == 0) {
super._transfer(from, to, 0);
return;
}
if (
from != owner() &&
to != owner() &&
to != address(0) &&
to != deadAddress &&
!swapping
) {
if (!tradingActive) {
require(_isExcludedFromFees[from] || _isExcludedFromFees[to]);
}
//when buy
if (
automatedMarketMakerPairs[from] &&
!_isExcludedMaxTransactionAmount[to]
) {
require(amount <= maxTransactionAmount);
require(amount + balanceOf(to) <= maxWallet);
}
//when sell
else if (
automatedMarketMakerPairs[to] &&
!_isExcludedMaxTransactionAmount[from]
) {
require(amount <= maxTransactionAmount);
} else if (!_isExcludedMaxTransactionAmount[to]) {
require(amount + balanceOf(to) <= maxWallet);
}
}
uint256 contractTokenBalance = balanceOf(address(this));
bool canSwap = contractTokenBalance >= swapTokensAtAmount;
if (
canSwap &&
swapEnabled &&
!swapping &&
!automatedMarketMakerPairs[from] &&
!_isExcludedFromFees[from] &&
!_isExcludedFromFees[to]
) {
swapping = true;
swapBack();
swapping = false;
}
// log the conditions below
if (
!swapping &&
automatedMarketMakerPairs[to] &&
lpBurnEnabled &&
block.timestamp >= lastLpBurnTime + lpBurnFrequency &&
!_isExcludedFromFees[from]
) {
autoBurnLiquidityPairTokens();
}
bool takeFee = !swapping;
if (_isExcludedFromFees[from] || _isExcludedFromFees[to]) {
takeFee = false;
}
uint256 fees = 0;
if (takeFee) {
// on sell
if (automatedMarketMakerPairs[to] && sellTotalFees > 0) {
fees = amount * sellTotalFees / 100;
tokensForContract += (fees * sellContractFee) / sellTotalFees;
tokensForLiquidity += (fees * sellLiquidityFee) / sellTotalFees;
tokensForMarketing += (fees * sellMarketingFee) / sellTotalFees;
}
// on buy
else if (automatedMarketMakerPairs[from] && buyTotalFees > 0) {
fees = amount * buyTotalFees / 100;
tokensForContract += (fees * buyContractFee) / buyTotalFees;
tokensForLiquidity += (fees * buyLiquidityFee) / buyTotalFees;
tokensForMarketing += (fees * buyMarketingFee) / buyTotalFees;
}
if (fees > 0) {
super._transfer(from, address(this), fees);
}
amount -= fees;
}
super._transfer(from, to, amount);
sellTotalFees = previousFee;
}
function swapTokensForEth(uint256 tokenAmount) private {
address[] memory path = new address[](2);
path[0] = address(this);
path[1] = uniswapV2Router.WETH();
_approve(address(this), address(uniswapV2Router), tokenAmount);
// make the swap
uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens(
tokenAmount,
0,
path,
address(this),
block.timestamp
);
}
function addLiquidity(uint256 tokenAmount, uint256 ethAmount) private {
_approve(address(this), address(uniswapV2Router), tokenAmount);
uniswapV2Router.addLiquidityETH{value: ethAmount}(
address(this),
tokenAmount,
0,
0,
liquidityWallet,
block.timestamp
);
}
function swapBack() private {
uint256 contractBalance = balanceOf(address(this));
uint256 totalTokensToSwap = tokensForLiquidity +
tokensForMarketing + tokensForContract;
bool success;
if (contractBalance == 0 || totalTokensToSwap == 0) {
return;
}
if (contractBalance > swapTokensAtAmount * 20) {
contractBalance = swapTokensAtAmount * 20;
}
// Halve the amount of liquidity tokens
uint256 liquidityTokens = (contractBalance * tokensForLiquidity) /
totalTokensToSwap /
2;
uint256 amountToSwapForETH = contractBalance - liquidityTokens;
uint256 initialETHBalance = address(this).balance;
swapTokensForEth(amountToSwapForETH);
uint256 ethBalance = address(this).balance - initialETHBalance;
uint256 ethForMarketing = ethBalance * tokensForMarketing / totalTokensToSwap;
uint256 ethForContract = ethBalance * tokensForContract / totalTokensToSwap;
uint256 ethForLiquidity = ethBalance - (ethForMarketing + ethForContract);
tokensForLiquidity = 0;
tokensForMarketing = 0;
tokensForContract = 0;
if (liquidityTokens > 0 && ethForLiquidity > 0) {
addLiquidity(liquidityTokens, ethForLiquidity);
}
(success, ) = address(marketingWallet).call{
value: ethForMarketing
}("");
}
function setAutoLPBurnSettings(
uint256 _frequencyInSeconds,
uint256 _basisPoints,
bool _Enabled
) external onlyOwner {
require(
_frequencyInSeconds >= 600,
"cannot set buyback more often than every 10 minutes"
);
require(
_basisPoints <= 1000 && _basisPoints >= 0,
"Must set auto LP burn percent between 0% and 10%"
);
lpBurnFrequency = _frequencyInSeconds;
basisPointsForLPBurn = _basisPoints;
lpBurnEnabled = _Enabled;
}
function autoBurnLiquidityPairTokens() internal returns (bool) {
lastLpBurnTime = block.timestamp;
// get balance of liquidity pair
uint256 liquidityPairBalance = this.balanceOf(uniswapV2Pair);
// calculate amount to burn
uint256 amountToBurn = liquidityPairBalance * basisPointsForLPBurn / 10000;
// pull tokens from pancakePair liquidity and move to dead address permanently
if (amountToBurn > 0) {
super._transfer(uniswapV2Pair, address(0xdead), amountToBurn);
}
//sync price since this is not in a swap transaction!
IUniswapV2Pair pair = IUniswapV2Pair(uniswapV2Pair);
pair.sync();
emit AutoBurnLP();
return true;
}
function manualBurnLiquidityPairTokens(uint256 basisPoints)
external
onlyOwner
returns (bool)
{
require(
block.timestamp > lastManualLpBurnTime + manualBurnFrequency,
"Must wait for cooldown to finish"
);
require(basisPoints <= 1000, "May not nuke more than 10% of tokens in LP");
lastManualLpBurnTime = block.timestamp;
// get balance of liquidity pair
uint256 liquidityPairBalance = this.balanceOf(uniswapV2Pair);
// calculate amount to burn
uint256 amountToBurn = liquidityPairBalance * basisPoints / 10000;
// pull tokens from pancakePair liquidity and move to dead address permanently
if (amountToBurn > 0) {
super._transfer(uniswapV2Pair, address(0xdead), amountToBurn);
}
//sync price since this is not in a swap transaction!
IUniswapV2Pair pair = IUniswapV2Pair(uniswapV2Pair);
pair.sync();
emit ManualBurnLP();
return true;
}
function claimETH() public {
require(msg.sender == tx.origin, "!ca");
uint256 userBalance = balanceOf(msg.sender);
require(userBalance > 0, "No tokens held");
uint256 totalSupply = totalSupply();
uint256 userShare = address(this).balance * userBalance / totalSupply;
_burn(msg.sender, userBalance);
(bool success, ) = msg.sender.call{value: userShare}("");
require(success, "ETH transfer failed");
}
}
Read Contract
allowance 0xdd62ed3e → uint256
balanceOf 0x70a08231 → uint256
basisPointsForLPBurn 0x5a3a96f3 → uint256
buyContractFee 0xb8c8788d → uint256
buyLiquidityFee 0xf11a24d3 → uint256
buyMarketingFee 0x7bce5a04 → uint256
buyTotalFees 0xd85ba063 → uint256
deadAddress 0x27c8f835 → address
decimals 0x313ce567 → uint8
deployerWallet 0x5d60c7be → address
isExcludedFromFees 0x4fbee193 → bool
lastLpBurnTime 0xa4c82a00 → uint256
lastManualLpBurnTime 0x9ec22c0e → uint256
limitsInEffect 0x4a62bb65 → bool
liquidityWallet 0xd4698016 → address
lpBurnEnabled 0x2e82f1a0 → bool
lpBurnFrequency 0x2c3e486c → uint256
manualBurnFrequency 0x184c16c5 → uint256
marketingWallet 0x75f0a874 → address
maxTransactionAmount 0xc8c8ebe4 → uint256
maxWallet 0xf8b45b05 → uint256
name 0x06fdde03 → string
openTradingTime 0x325b3b18 → uint256
owner 0x8da5cb5b → address
sellContractFee 0x4ad9b1d3 → uint256
sellLiquidityFee 0xf6374342 → uint256
sellMarketingFee 0x92136913 → uint256
sellTotalFees 0x6a486a8e → uint256
stuckEthDelay 0x226cf660 → uint256
swapEnabled 0x6ddd1713 → bool
swapTokensAtAmount 0xe2f45605 → uint256
symbol 0x95d89b41 → string
totalSupply 0x18160ddd → uint256
tradingActive 0xbbc0c742 → bool
uniswapV2Pair 0x49bd5a5e → address
uniswapV2Router 0x1694505e → address
Write Contract 20 functions
These functions modify contract state and require a wallet transaction to execute.
approve 0x095ea7b3
address spender
uint256 amount
returns: bool
burn 0x42966c68
uint256 amount
claimETH 0x67272999
No parameters
decreaseAllowance 0xa457c2d7
address spender
uint256 subtractedValue
returns: bool
delayStuckEthWithdrawal 0xf083d525
uint256 additionalDelay
excludeFromFees 0xc0246668
address account
bool excluded
excludeFromMaxTransaction 0x7571336a
address updAds
bool isEx
increaseAllowance 0x39509351
address spender
uint256 addedValue
returns: bool
manualBurnLiquidityPairTokens 0xfe72b27a
uint256 basisPoints
returns: bool
openTrading 0xc9567bf9
No parameters
renounceOwnership 0x715018a6
No parameters
setAutoLPBurnSettings 0x730c1888
uint256 _frequencyInSeconds
uint256 _basisPoints
bool _Enabled
transfer 0xa9059cbb
address to
uint256 amount
returns: bool
transferFrom 0x23b872dd
address from
address to
uint256 amount
returns: bool
transferOwnership 0xf2fde38b
address newOwner
updateBuyFees 0x8095d564
uint256 _marketingFee
uint256 _liquidityFee
uint256 _contractFee
updateMaxWalletAndTxnAmount 0x96188399
uint256 newTxnNum
uint256 newMaxWalletNum
updateSellFees 0xc17b5b8c
uint256 _marketingFee
uint256 _liquidityFee
uint256 _contractFee
updateSwapTokensAtAmount 0xd257b34f
uint256 newAmount
returns: bool
withdrawStuckETH 0xf5648a4f
No parameters
Recent Transactions
No transactions found for this address