Address Contract Partially Verified
Address
0xDffC63f92c939deB112D88735ade3B4D21B6D491
Balance
1.7205 ETH
Nonce
1
Code Size
12613 bytes
Creator
0x861E46ad...9809 at tx 0xcf320ef5...6de0df
Indexed Transactions
0
Contract Bytecode
12613 bytes
0x60806040526004361061026b5760003560e01c8063715018a611610144578063a8aa1b31116100b6578063e2f456051161007a578063e2f45605146106bd578063ea2f0b37146106d2578063ea4cfe12146106f2578063f2fde38b14610707578063f887ea4014610727578063fcf07c6b1461073c57610272565b8063a8aa1b3114610633578063a9059cbb14610648578063b4f5f09e14610668578063c3e0f5cf1461067d578063dd62ed3e1461069d57610272565b80638f9a55c0116101085780638f9a55c014610594578063924de9b7146105a957806395d89b41146105c95780639e252f00146105de578063a457c2d7146105fe578063a5ece9411461061e57610272565b8063715018a61461051557806382bf293c1461052a57806388e765ff1461054a57806388f820201461055f5780638da5cb5b1461057f57610272565b80633bd5d173116101dd57806352390c02116101a157806352390c02146104765780635342acb414610496578063550e8867146104b657806366d602ae146104cb5780636ddd1713146104e057806370a08231146104f557610272565b80633bd5d173146103e157806341cb87fc14610401578063437823ec146104215780634549b039146104415780634ada218b1461046157610272565b806327c8f8351161022f57806327c8f83514610333578063293230b8146103485780632d8381191461035f578063313ce5671461037f5780633685d419146103a157806339509351146103c157610272565b806306fdde0314610277578063095ea7b3146102a257806315abe50f146102cf57806318160ddd146102f157806323b872dd1461031357610272565b3661027257005b600080fd5b34801561028357600080fd5b5061028c610751565b6040516102999190612a9f565b60405180910390f35b3480156102ae57600080fd5b506102c26102bd36600461292e565b610777565b6040516102999190612a94565b3480156102db57600080fd5b506102e4610795565b6040516102999190612a12565b3480156102fd57600080fd5b506103066107a4565b6040516102999190612f79565b34801561031f57600080fd5b506102c261032e3660046128ee565b6107aa565b34801561033f57600080fd5b506102e4610831565b34801561035457600080fd5b5061035d610837565b005b34801561036b57600080fd5b5061030661037a366004612991565b6108d1565b34801561038b57600080fd5b50610394610914565b6040516102999190612ff2565b3480156103ad57600080fd5b5061035d6103bc36600461287e565b610919565b3480156103cd57600080fd5b506102c26103dc36600461292e565b610aee565b3480156103ed57600080fd5b5061035d6103fc366004612991565b610b3d565b34801561040d57600080fd5b5061035d61041c36600461287e565b610be7565b34801561042d57600080fd5b5061035d61043c36600461287e565b610f8d565b34801561044d57600080fd5b5061030661045c3660046129c1565b610ff0565b34801561046d57600080fd5b506102c261104a565b34801561048257600080fd5b5061035d61049136600461287e565b611053565b3480156104a257600080fd5b506102c26104b136600461287e565b61118b565b3480156104c257600080fd5b506102e46111a9565b3480156104d757600080fd5b506103066111b8565b3480156104ec57600080fd5b506102c26111be565b34801561050157600080fd5b5061030661051036600461287e565b6111cc565b34801561052157600080fd5b5061035d61122e565b34801561053657600080fd5b5061035d610545366004612991565b611279565b34801561055657600080fd5b506103066112de565b34801561056b57600080fd5b506102c261057a36600461287e565b6112e4565b34801561058b57600080fd5b506102e4611302565b3480156105a057600080fd5b50610306611311565b3480156105b557600080fd5b5061035d6105c4366004612959565b611317565b3480156105d557600080fd5b5061028c611370565b3480156105ea57600080fd5b5061035d6105f9366004612991565b611395565b34801561060a57600080fd5b506102c261061936600461292e565b611421565b34801561062a57600080fd5b506102e4611489565b34801561063f57600080fd5b506102e4611498565b34801561065457600080fd5b506102c261066336600461292e565b6114a7565b34801561067457600080fd5b5061035d6114bb565b34801561068957600080fd5b5061035d61069836600461287e565b611519565b3480156106a957600080fd5b506103066106b83660046128b6565b61164d565b3480156106c957600080fd5b50610306611678565b3480156106de57600080fd5b5061035d6106ed36600461287e565b61167e565b3480156106fe57600080fd5b506102e46116de565b34801561071357600080fd5b5061035d61072236600461287e565b6116ed565b34801561073357600080fd5b506102e461175e565b34801561074857600080fd5b506102e4611774565b60408051808201909152600c81526b2232bb37bab9102a37b5b2b760a11b602082015290565b600061078b6107846117a2565b84846117a6565b5060015b92915050565b6014546001600160a01b031681565b600a5490565b60006107b784848461185a565b610827846107c36117a2565b610822856040518060600160405280602881526020016130c3602891396001600160a01b038a166000908152600360205260408120906108016117a2565b6001600160a01b031681526020810191909152604001600020549190611c1a565b6117a6565b5060019392505050565b61dead81565b61083f6117a2565b6001600160a01b0316610850611302565b6001600160a01b03161461087f5760405162461bcd60e51b815260040161087690612d77565b60405180910390fd5b6008805461ff001960ff19909116600117166101001790556040517fb3da2db3dfc3778f99852546c6e9ab39ec253f9de7b0847afec61bd27878e923906108c7904290612f79565b60405180910390a1565b6000600b548211156108f55760405162461bcd60e51b815260040161087690612bbd565b60006108ff611c46565b905061090b8184613018565b9150505b919050565b601290565b6109216117a2565b6001600160a01b0316610932611302565b6001600160a01b0316146109585760405162461bcd60e51b815260040161087690612d77565b6001600160a01b03811660009081526006602052604090205460ff166109905760405162461bcd60e51b815260040161087690612d09565b60005b600754811015610aea57816001600160a01b0316600782815481106109c857634e487b7160e01b600052603260045260246000fd5b6000918252602090912001546001600160a01b03161415610ad857600780546109f390600190613057565b81548110610a1157634e487b7160e01b600052603260045260246000fd5b600091825260209091200154600780546001600160a01b039092169183908110610a4b57634e487b7160e01b600052603260045260246000fd5b600091825260208083209190910180546001600160a01b0319166001600160a01b039485161790559184168152600282526040808220829055600690925220805460ff191690556007805480610ab157634e487b7160e01b600052603160045260246000fd5b600082815260209020810160001990810180546001600160a01b0319169055019055610aea565b80610ae28161306e565b915050610993565b5050565b600061078b610afb6117a2565b848460036000610b096117a2565b6001600160a01b03908116825260208083019390935260409182016000908120918b16815292529020546108229190613000565b6000610b476117a2565b6001600160a01b03811660009081526006602052604090205490915060ff1615610b835760405162461bcd60e51b815260040161087690612eec565b6000610b90836001611c69565b80516001600160a01b038416600090815260016020526040902054919250610bb89190611cb1565b6001600160a01b0383166000908152600160205260409020558051600b54610bdf91611cb1565b600b55505050565b610bef6117a2565b6001600160a01b0316610c00611302565b6001600160a01b031614610c265760405162461bcd60e51b815260040161087690612d77565b6008546001600160a01b03828116600160201b909204161415610c4857600080fd5b60008190506000816001600160a01b031663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b158015610c8857600080fd5b505afa158015610c9c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610cc0919061289a565b6001600160a01b031663e6a4390530846001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b158015610d0857600080fd5b505afa158015610d1c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d40919061289a565b6040518363ffffffff1660e01b8152600401610d5d929190612a26565b60206040518083038186803b158015610d7557600080fd5b505afa158015610d89573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610dad919061289a565b90506001600160a01b038116610f4257816001600160a01b031663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b158015610df657600080fd5b505afa158015610e0a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e2e919061289a565b6001600160a01b031663c9c6539630846001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b158015610e7657600080fd5b505afa158015610e8a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610eae919061289a565b6040518363ffffffff1660e01b8152600401610ecb929190612a26565b602060405180830381600087803b158015610ee557600080fd5b505af1158015610ef9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f1d919061289a565b600980546001600160a01b0319166001600160a01b0392909216919091179055610f5e565b600980546001600160a01b0319166001600160a01b0383161790555b50600880546001600160a01b03909216600160201b02640100000000600160c01b031990921691909117905550565b610f956117a2565b6001600160a01b0316610fa6611302565b6001600160a01b031614610fcc5760405162461bcd60e51b815260040161087690612d77565b6001600160a01b03166000908152600560205260409020805460ff19166001179055565b6000600a548311156110145760405162461bcd60e51b815260040161087690612d40565b81611030576000611026846001611c69565b51915061078f9050565b600061103d846001611c69565b60200151915061078f9050565b60085460ff1681565b61105b6117a2565b6001600160a01b031661106c611302565b6001600160a01b0316146110925760405162461bcd60e51b815260040161087690612d77565b6001600160a01b03811660009081526006602052604090205460ff16156110cb5760405162461bcd60e51b815260040161087690612c8f565b6001600160a01b03811660009081526001602052604090205415611125576001600160a01b03811660009081526001602052604090205461110b906108d1565b6001600160a01b0382166000908152600260205260409020555b6001600160a01b03166000818152600660205260408120805460ff191660019081179091556007805491820181559091527fa66cc928b5edb82af9bd49922954155ab7b0942694bea4ce44661d9a8736c6880180546001600160a01b0319169091179055565b6001600160a01b031660009081526005602052604090205460ff1690565b6013546001600160a01b031681565b600d5481565b600854610100900460ff1681565b6001600160a01b03811660009081526006602052604081205460ff161561120c57506001600160a01b03811660009081526002602052604090205461090f565b6001600160a01b03821660009081526001602052604090205461078f906108d1565b6112366117a2565b6001600160a01b0316611247611302565b6001600160a01b03161461126d5760405162461bcd60e51b815260040161087690612d77565b6112776000611cbd565b565b6112816117a2565b6001600160a01b0316611292611302565b6001600160a01b0316146112b85760405162461bcd60e51b815260040161087690612d77565b6112d860646112d283600a5461178390919063ffffffff16565b90611796565b600f5550565b600c5481565b6001600160a01b031660009081526006602052604090205460ff1690565b6000546001600160a01b031690565b600f5481565b61131f6117a2565b6001600160a01b0316611330611302565b6001600160a01b0316146113565760405162461bcd60e51b815260040161087690612d77565b600880549115156101000261ff0019909216919091179055565b60408051808201909152600b81526a52455354415552414e545360a81b602082015290565b61139d6117a2565b6001600160a01b03166113ae611302565b6001600160a01b0316146113d45760405162461bcd60e51b815260040161087690612d77565b804710156113f45760405162461bcd60e51b815260040161087690612dac565b604051339082156108fc029083906000818181858888f19350505050158015610aea573d6000803e3d6000fd5b600061078b61142e6117a2565b84610822856040518060600160405280602581526020016130eb60259139600360006114586117a2565b6001600160a01b03908116825260208083019390935260409182016000908120918d16815292529020549190611c1a565b6011546001600160a01b031681565b6009546001600160a01b031681565b600061078b6114b46117a2565b848461185a565b6114c36117a2565b6001600160a01b03166114d4611302565b6001600160a01b0316146114fa5760405162461bcd60e51b815260040161087690612d77565b6008805462ff0000198116620100009182900460ff1615909102179055565b6115216117a2565b6001600160a01b0316611532611302565b6001600160a01b0316146115585760405162461bcd60e51b815260040161087690612d77565b6040516370a0823160e01b81526001600160a01b0382169063a9059cbb90339083906370a082319061158e903090600401612a12565b60206040518083038186803b1580156115a657600080fd5b505afa1580156115ba573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115de91906129a9565b6040518363ffffffff1660e01b81526004016115fb929190612a40565b602060405180830381600087803b15801561161557600080fd5b505af1158015611629573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610aea9190612975565b6001600160a01b03918216600090815260036020908152604080832093909416825291909152205490565b600e5481565b6116866117a2565b6001600160a01b0316611697611302565b6001600160a01b0316146116bd5760405162461bcd60e51b815260040161087690612d77565b6001600160a01b03166000908152600560205260409020805460ff19169055565b6010546001600160a01b031681565b6116f56117a2565b6001600160a01b0316611706611302565b6001600160a01b03161461172c5760405162461bcd60e51b815260040161087690612d77565b6001600160a01b0381166117525760405162461bcd60e51b815260040161087690612c07565b61175b81611cbd565b50565b600854600160201b90046001600160a01b031681565b6012546001600160a01b031681565b600061178f8284613038565b9392505050565b600061178f8284613018565b3390565b6001600160a01b0383166117cc5760405162461bcd60e51b815260040161087690612e71565b6001600160a01b0382166117f25760405162461bcd60e51b815260040161087690612c4d565b6001600160a01b0380841660008181526003602090815260408083209487168084529490915290819020849055517f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259061184d908590612f79565b60405180910390a3505050565b6001600160a01b0383166118805760405162461bcd60e51b815260040161087690612e2c565b6001600160a01b0382166118a65760405162461bcd60e51b815260040161087690612af2565b600081116118c65760405162461bcd60e51b815260040161087690612de3565b6118cf836111cc565b8111156118ee5760405162461bcd60e51b815260040161087690612b6c565b6001600160a01b03831660009081526005602052604090205460ff1615801561193057506001600160a01b03821660009081526005602052604090205460ff16155b156119575760085460ff166119575760405162461bcd60e51b815260040161087690612b35565b61195f611302565b6001600160a01b0316836001600160a01b0316141580156119995750611983611302565b6001600160a01b0316826001600160a01b031614155b80156119ad57506001600160a01b03821615155b80156119c457506001600160a01b03821661dead14155b80156119dd57506009546001600160a01b038481169116145b15611a6457600c54811115611a045760405162461bcd60e51b815260040161087690612eb5565b6000611a0f836111cc565b600f54909150611a1f8383613000565b11158015611a4657506001600160a01b03841660009081526004602052604090205460ff16155b611a625760405162461bcd60e51b815260040161087690612cc6565b505b611a6c611302565b6001600160a01b0316836001600160a01b031614158015611aa65750611a90611302565b6001600160a01b0316826001600160a01b031614155b8015611aba57506001600160a01b03821615155b8015611ad157506001600160a01b03821661dead14155b8015611aea57506009546001600160a01b038481169116145b15611b1157600d54811115611b115760405162461bcd60e51b815260040161087690612f38565b6000611b1c306111cc565b600e546008549192508210159062010000900460ff16158015611b465750600854610100900460ff165b8015611b4f5750805b8015611b6957506009546001600160a01b03868116911614155b15611b7957611b79600e54611d0d565b6001600160a01b038516600090815260056020526040902054611c139086908690869060ff1680611bc257506001600160a01b03881660009081526005602052604090205460ff165b158015611bf857506009546001600160a01b03898116911614801590611bf657506009546001600160a01b038a8116911614155b155b8015611c0e57506008546301000000900460ff16155b611e73565b5050505050565b60008184841115611c3e5760405162461bcd60e51b81526004016108769190612a9f565b505050900390565b6000806000611c5361210b565b9092509050611c628183613018565b9250505090565b611c71612824565b611c7b83836122c9565b9050611c90818484611c8b611c46565b6123d7565b60a08701526080860152606085015260408401526020830152815292915050565b600061178f8284613057565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6008805463ff0000001962ff000019909116620100001716630100000017905560408051608081018252601e8152602860208201819052601492820192909252600a606082018190529091600091611d659190613000565b611d70906002613038565b9050600081836060015185611d859190613038565b611d8f9190613018565b90506000611d9d8286613057565b905047611da982612489565b6000611db58247613057565b90506000866060015186611dc99190613057565b611dd39083613018565b90506000876060015182611de79190613038565b90508015611df957611df98682612635565b6020880151600090611e0c846002613038565b611e169190613038565b90508015611e5a576010546040516001600160a01b039091169082156108fc029083906000818181858888f19350505050158015611e58573d6000803e3d6000fd5b505b50506008805463ffff0000191690555050505050505050565b6000611e7f8383611c69565b6001600160a01b03861660009081526006602052604090205490915060ff1615611ee1576001600160a01b038516600090815260026020526040902054611ec7908490613057565b6001600160a01b0386166000908152600260205260409020555b6001600160a01b03841660009081526006602052604090205460ff1615611f445760c08101516001600160a01b038516600090815260026020526040902054611f2a9190613000565b6001600160a01b0385166000908152600260205260409020555b80516001600160a01b038616600090815260016020526040902054611f699190613057565b6001600160a01b0380871660009081526001602090815260408083209490945584015191871681529190912054611fa09190613000565b6001600160a01b0385166000908152600160205260409081902091909155810151611fca906126ee565b611fdd8160600151826101000151612708565b611ff08160a00151826101400151612708565b612003816080015182610120015161276d565b836001600160a01b0316856001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360c0015160405161204a9190612f79565b60405180910390a3306001600160a01b0316856001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83610100015184610140015161209d9190613000565b6040516120aa9190612f79565b60405180910390a361dead6001600160a01b0316856001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8361012001516040516120fc9190612f79565b60405180910390a35050505050565b600b54600a546000918291825b6007548110156122965782600160006007848154811061214857634e487b7160e01b600052603260045260246000fd5b60009182526020808320909101546001600160a01b0316835282019290925260400190205411806121c1575081600260006007848154811061219a57634e487b7160e01b600052603260045260246000fd5b60009182526020808320909101546001600160a01b03168352820192909252604001902054115b156121d857600b54600a54945094505050506122c5565b60016000600783815481106121fd57634e487b7160e01b600052603260045260246000fd5b60009182526020808320909101546001600160a01b0316835282019290925260400190205461222c9084613057565b9250600260006007838154811061225357634e487b7160e01b600052603260045260246000fd5b60009182526020808320909101546001600160a01b031683528201929092526040019020546122829083613057565b91508061228e8161306e565b915050612118565b50600a54600b546122a79190613018565b8210156122bf57600b54600a549350935050506122c5565b90925090505b9091565b6122d1612824565b60408051608081018252601e815260286020820152601491810191909152600a606082015282612308575060c0810183905261078f565b80516103e8906123189086613038565b6123229190613018565b60e083015260208101516103e89061233a9086613038565b6123449190613018565b61010083015260408101516103e89061235d9086613038565b6123679190613018565b61012083015260608101516103e8906123809086613038565b61238a9190613018565b610140830181905261012083015161010084015160e08501516123ad9088613057565b6123b79190613057565b6123c19190613057565b6123cb9190613057565b60c08301525092915050565b600080808080806123e8878a613038565b9550876124035750849350600092508291508190508061247c565b868a60e001516124139190613038565b9350868a61010001516124269190613038565b9250868a61012001516124399190613038565b9150868a610140015161244c9190613038565b905080828461245b878a613057565b6124659190613057565b61246f9190613057565b6124799190613057565b94505b9499939850945094509450565b60408051600280825260608201835260009260208301908036833701905050905030816000815181106124cc57634e487b7160e01b600052603260045260246000fd5b60200260200101906001600160a01b031690816001600160a01b031681525050600860049054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b15801561253a57600080fd5b505afa15801561254e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612572919061289a565b8160018151811061259357634e487b7160e01b600052603260045260246000fd5b6001600160a01b0392831660209182029290920101526008546125c0913091600160201b900416846117a6565b60085460405163791ac94760e01b8152600160201b9091046001600160a01b03169063791ac947906125ff908590600090869030904290600401612f82565b600060405180830381600087803b15801561261957600080fd5b505af115801561262d573d6000803e3d6000fd5b505050505050565b600854612654903090600160201b90046001600160a01b0316846117a6565b600854600160201b90046001600160a01b031663f305d71982308560008061267a611302565b426040518863ffffffff1660e01b815260040161269c96959493929190612a59565b6060604051808303818588803b1580156126b557600080fd5b505af11580156126c9573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190611c1391906129e5565b80600b60008282546127009190613057565b909155505050565b3060009081526006602052604090205460ff161561274557306000908152600260205260408120805483929061273f908490613000565b90915550505b3060009081526001602052604081208054849290612764908490613000565b90915550505050565b61dead60005260066020527f1aecba4ebe7a4e0673e4891b2b092b2228e4322380b579fb494fad3da8586e225460ff16156127e65761dead600090815260026020527f6a9609baa168169acaea398c4407efea4be641bb08e21e88806d9836fd9333cc80548392906127e0908490613000565b90915550505b61dead600090815260016020527fb34209a263f6c38fe55f099e9e70f9d67e93982480ff3234a5e0108028ad164d8054849290612764908490613000565b60405180610160016040528060008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081525090565b60006020828403121561288f578081fd5b813561178f8161309f565b6000602082840312156128ab578081fd5b815161178f8161309f565b600080604083850312156128c8578081fd5b82356128d38161309f565b915060208301356128e38161309f565b809150509250929050565b600080600060608486031215612902578081fd5b833561290d8161309f565b9250602084013561291d8161309f565b929592945050506040919091013590565b60008060408385031215612940578182fd5b823561294b8161309f565b946020939093013593505050565b60006020828403121561296a578081fd5b813561178f816130b4565b600060208284031215612986578081fd5b815161178f816130b4565b6000602082840312156129a2578081fd5b5035919050565b6000602082840312156129ba578081fd5b5051919050565b600080604083850312156129d3578182fd5b8235915060208301356128e3816130b4565b6000806000606084860312156129f9578283fd5b8351925060208401519150604084015190509250925092565b6001600160a01b0391909116815260200190565b6001600160a01b0392831681529116602082015260400190565b6001600160a01b03929092168252602082015260400190565b6001600160a01b039687168152602081019590955260408501939093526060840191909152909216608082015260a081019190915260c00190565b901515815260200190565b6000602080835283518082850152825b81811015612acb57858101830151858201604001528201612aaf565b81811115612adc5783604083870101525b50601f01601f1916929092016040019392505050565b60208082526023908201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260408201526265737360e81b606082015260800190565b6020808252601a908201527f54726164696e67206973206e6f7420656e61626c656420796574000000000000604082015260600190565b60208082526031908201527f596f752061726520747279696e6720746f207472616e73666572206d6f7265206040820152707468616e20796f75722062616c616e636560781b606082015260800190565b6020808252602a908201527f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260408201526965666c656374696f6e7360b01b606082015260800190565b60208082526026908201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160408201526564647265737360d01b606082015260800190565b60208082526022908201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604082015261737360f01b606082015260800190565b6020808252601b908201527f4163636f756e7420697320616c7265616479206578636c756465640000000000604082015260600190565b60208082526023908201527f45786365656473206d6178696d756d2077616c6c657420746f6b656e20616d6f6040820152621d5b9d60ea1b606082015260800190565b60208082526017908201527f4163636f756e74206973206e6f74206578636c75646564000000000000000000604082015260600190565b6020808252601f908201527f416d6f756e74206d757374206265206c657373207468616e20737570706c7900604082015260600190565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b60208082526018908201527f696e73756666696369656e74204554482062616c616e63650000000000000000604082015260600190565b60208082526029908201527f5472616e7366657220616d6f756e74206d7573742062652067726561746572206040820152687468616e207a65726f60b81b606082015260800190565b60208082526025908201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604082015264647265737360d81b606082015260800190565b60208082526024908201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646040820152637265737360e01b606082015260800190565b6020808252601e908201527f796f752061726520657863656564696e67206d6178427579416d6f756e740000604082015260600190565b6020808252602c908201527f4578636c75646564206164647265737365732063616e6e6f742063616c6c207460408201526b3434b990333ab731ba34b7b760a11b606082015260800190565b60208082526021908201527f416d6f756e7420697320657863656564696e67206d617853656c6c416d6f756e6040820152601d60fa1b606082015260800190565b90815260200190565b600060a082018783526020878185015260a0604085015281875180845260c0860191508289019350845b81811015612fd15784516001600160a01b031683529383019391830191600101612fac565b50506001600160a01b03969096166060850152505050608001529392505050565b60ff91909116815260200190565b6000821982111561301357613013613089565b500190565b60008261303357634e487b7160e01b81526012600452602481fd5b500490565b600081600019048311821515161561305257613052613089565b500290565b60008282101561306957613069613089565b500390565b600060001982141561308257613082613089565b5060010190565b634e487b7160e01b600052601160045260246000fd5b6001600160a01b038116811461175b57600080fd5b801515811461175b57600080fdfe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa26469706673582212207252393e54ce98f39e19bd29026a08e8c0ce002b11817c482b273e056ee66b6664736f6c63430008000033
Verified Source Code Partial Match
Compiler: v0.8.0+commit.c7dfd78e
EVM: istanbul
Optimization: Yes (200 runs)
DevourToken.sol 1037 lines
// SPDX-License-Identifier: NOLICENSE
pragma solidity ^0.8.0;
interface IERC20 {
function totalSupply() external view returns (uint256);
function balanceOf(address account) external view returns (uint256);
function transfer(address recipient, 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 sender,
address recipient,
uint256 amount
) external returns (bool);
event Transfer(address indexed from, address indexed to, uint256 value);
event Approval(
address indexed owner,
address indexed spender,
uint256 value
);
}
library SafeMath {
function tryAdd(uint256 a, uint256 b)
internal
pure
returns (bool, uint256)
{
unchecked {
uint256 c = a + b;
if (c < a) return (false, 0);
return (true, c);
}
}
function trySub(uint256 a, uint256 b)
internal
pure
returns (bool, uint256)
{
unchecked {
if (b > a) return (false, 0);
return (true, a - b);
}
}
function tryMul(uint256 a, uint256 b)
internal
pure
returns (bool, uint256)
{
unchecked {
if (a == 0) return (true, 0);
uint256 c = a * b;
if (c / a != b) return (false, 0);
return (true, c);
}
}
function tryDiv(uint256 a, uint256 b)
internal
pure
returns (bool, uint256)
{
unchecked {
if (b == 0) return (false, 0);
return (true, a / b);
}
}
function tryMod(uint256 a, uint256 b)
internal
pure
returns (bool, uint256)
{
unchecked {
if (b == 0) return (false, 0);
return (true, a % b);
}
}
function add(uint256 a, uint256 b) internal pure returns (uint256) {
return a + b;
}
function sub(uint256 a, uint256 b) internal pure returns (uint256) {
return a - b;
}
function mul(uint256 a, uint256 b) internal pure returns (uint256) {
return a * b;
}
function div(uint256 a, uint256 b) internal pure returns (uint256) {
return a / b;
}
function mod(uint256 a, uint256 b) internal pure returns (uint256) {
return a % b;
}
function sub(
uint256 a,
uint256 b,
string memory errorMessage
) internal pure returns (uint256) {
unchecked {
require(b <= a, errorMessage);
return a - b;
}
}
function div(
uint256 a,
uint256 b,
string memory errorMessage
) internal pure returns (uint256) {
unchecked {
require(b > 0, errorMessage);
return a / b;
}
}
function mod(
uint256 a,
uint256 b,
string memory errorMessage
) internal pure returns (uint256) {
unchecked {
require(b > 0, errorMessage);
return a % b;
}
}
}
abstract contract Context {
function _msgSender() internal view virtual returns (address) {
return msg.sender;
}
function _msgData() internal view virtual returns (bytes calldata) {
this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691
return msg.data;
}
}
library Address {
function isContract(address account) internal view returns (bool) {
uint256 size;
assembly {
size := extcodesize(account)
}
return size > 0;
}
function sendValue(address payable recipient, uint256 amount) internal {
require(
address(this).balance >= amount,
"Address: insufficient balance"
);
(bool success, ) = recipient.call{value: amount}("");
require(
success,
"Address: unable to send value, recipient may have reverted"
);
}
function functionCall(address target, bytes memory data)
internal
returns (bytes memory)
{
return functionCall(target, data, "Address: low-level call failed");
}
function functionCall(
address target,
bytes memory data,
string memory errorMessage
) internal returns (bytes memory) {
return functionCallWithValue(target, data, 0, errorMessage);
}
function functionCallWithValue(
address target,
bytes memory data,
uint256 value
) internal returns (bytes memory) {
return
functionCallWithValue(
target,
data,
value,
"Address: low-level call with value failed"
);
}
function functionCallWithValue(
address target,
bytes memory data,
uint256 value,
string memory errorMessage
) internal returns (bytes memory) {
require(
address(this).balance >= value,
"Address: insufficient balance for call"
);
require(isContract(target), "Address: call to non-contract");
(bool success, bytes memory returndata) = target.call{value: value}(
data
);
return _verifyCallResult(success, returndata, errorMessage);
}
function functionStaticCall(address target, bytes memory data)
internal
view
returns (bytes memory)
{
return
functionStaticCall(
target,
data,
"Address: low-level static call failed"
);
}
function functionStaticCall(
address target,
bytes memory data,
string memory errorMessage
) internal view returns (bytes memory) {
require(isContract(target), "Address: static call to non-contract");
(bool success, bytes memory returndata) = target.staticcall(data);
return _verifyCallResult(success, returndata, errorMessage);
}
function functionDelegateCall(address target, bytes memory data)
internal
returns (bytes memory)
{
return
functionDelegateCall(
target,
data,
"Address: low-level delegate call failed"
);
}
function functionDelegateCall(
address target,
bytes memory data,
string memory errorMessage
) internal returns (bytes memory) {
require(isContract(target), "Address: delegate call to non-contract");
(bool success, bytes memory returndata) = target.delegatecall(data);
return _verifyCallResult(success, returndata, errorMessage);
}
function _verifyCallResult(
bool success,
bytes memory returndata,
string memory errorMessage
) private pure returns (bytes memory) {
if (success) {
return returndata;
} else {
if (returndata.length > 0) {
assembly {
let returndata_size := mload(returndata)
revert(add(32, returndata), returndata_size)
}
} else {
revert(errorMessage);
}
}
}
}
abstract contract Ownable is Context {
address private _owner;
event OwnershipTransferred(
address indexed previousOwner,
address indexed newOwner
);
constructor() {
_setOwner(_msgSender());
}
function owner() public view virtual returns (address) {
return _owner;
}
modifier onlyOwner() {
require(owner() == _msgSender(), "Ownable: caller is not the owner");
_;
}
function renounceOwnership() public virtual onlyOwner {
_setOwner(address(0));
}
function transferOwnership(address newOwner) public virtual onlyOwner {
require(
newOwner != address(0),
"Ownable: new owner is the zero address"
);
_setOwner(newOwner);
}
function _setOwner(address newOwner) private {
address oldOwner = _owner;
_owner = newOwner;
emit OwnershipTransferred(oldOwner, newOwner);
}
}
interface IFactory {
function createPair(address tokenA, address tokenB)
external
returns (address pair);
function getPair(address tokenA, address tokenB)
external
view
returns (address pair);
}
interface IRouter {
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 swapExactETHForTokensSupportingFeeOnTransferTokens(
uint256 amountOutMin,
address[] calldata path,
address to,
uint256 deadline
) external payable;
function swapExactTokensForETHSupportingFeeOnTransferTokens(
uint256 amountIn,
uint256 amountOutMin,
address[] calldata path,
address to,
uint256 deadline
) external;
}
contract DevourToken is Context, IERC20, Ownable {
using SafeMath for uint256;
using Address for address;
mapping(address => uint256) private _rOwned;
mapping(address => uint256) private _tOwned;
mapping(address => mapping(address => uint256)) private _allowances;
mapping(address => bool) private _isExcludedFromMaxWallet;
mapping(address => bool) private _isExcludedFromFee;
mapping(address => bool) private _isExcluded;
address[] private _excluded;
bool public tradingEnabled;
bool public swapEnabled;
bool private swapping;
bool private isSwapNLiq = false;
IRouter public router;
address public pair;
uint8 private constant _decimals = 18;
uint256 private constant MAX = ~uint256(0);
uint256 private _tTotal = 1000000000000000 * 10**_decimals;
uint256 private _rTotal = (MAX - (MAX % _tTotal));
uint256 public maxBuyAmount = _tTotal.mul(2).div(100);
uint256 public maxSellAmount = _tTotal.mul(1).div(100);
uint256 public swapTokensAtAmount = 5000000000000 * 10**_decimals;
uint256 public _maxWalletSize = _tTotal.mul(2).div(100);
address public operationsAddress =
0xf254Ac119AcdDE9d64afC9a622c0a86bF6473ff8;
address public marketingAddress =
0x2988F8A65E69Ce9203B57E4a82828560c5735c1f;
address public foundationAddress =
0xEb2c05E949B587D7c2918C5543F567eC302eF2e7;
address public exchangeLiquidityReserve =
0x5A75f7c8aE75a04380eD90bBDee2D6F686af02FE;
address public manualBurnReserve =
0xDd4b03a752862dBdFdD8C8663eB7dEA94BcAe97C;
address public constant deadAddress =
0x000000000000000000000000000000000000dEaD;
string private constant _name = "Devour Token";
string private constant _symbol = "RESTAURANTS";
struct feeRatesStruct {
uint256 rfi;
uint256 operations;
uint256 burn;
uint256 liquidity;
}
struct valuesFromGetValues {
uint256 rAmount;
uint256 rTransferAmount;
uint256 rRfi;
uint256 rOperations;
uint256 rBurn;
uint256 rLiquidity;
uint256 tTransferAmount;
uint256 tRfi;
uint256 tOperations;
uint256 tBurn;
uint256 tLiquidity;
}
event TradingEnabled(uint256 startDate);
modifier lockTheSwap() {
swapping = true;
_;
swapping = false;
}
constructor(address routerAddress) {
IRouter _router = IRouter(routerAddress);
address _pair = IFactory(_router.factory()).createPair(
address(this),
_router.WETH()
);
router = _router;
pair = _pair;
_rOwned[owner()] = _rTotal;
_isExcluded[deadAddress] = true;
_isExcluded[marketingAddress] = true;
_isExcluded[foundationAddress] = true;
_isExcluded[operationsAddress] = true;
_isExcludedFromFee[owner()] = true;
_isExcludedFromFee[operationsAddress] = true;
_isExcludedFromFee[deadAddress] = true;
_isExcludedFromFee[marketingAddress] = true;
_isExcludedFromFee[foundationAddress] = true;
_isExcludedFromFee[manualBurnReserve] = true;
_isExcludedFromFee[exchangeLiquidityReserve] = true;
_isExcludedFromMaxWallet[owner()] = true;
_isExcludedFromMaxWallet[operationsAddress] = true;
_isExcludedFromMaxWallet[deadAddress] = true;
_isExcludedFromMaxWallet[marketingAddress] = true;
_isExcludedFromMaxWallet[foundationAddress] = true;
_isExcludedFromMaxWallet[manualBurnReserve] = true;
_isExcludedFromMaxWallet[exchangeLiquidityReserve] = true;
emit Transfer(address(0), owner(), _tTotal);
}
//std ERC20:
function name() public pure returns (string memory) {
return _name;
}
function symbol() public pure returns (string memory) {
return _symbol;
}
function decimals() public pure returns (uint8) {
return _decimals;
}
//override ERC20:
function totalSupply() public view override returns (uint256) {
return _tTotal;
}
function balanceOf(address account) public view override returns (uint256) {
if (_isExcluded[account]) return _tOwned[account];
return tokenFromReflection(_rOwned[account]);
}
function transfer(address recipient, uint256 amount)
public
override
returns (bool)
{
_transfer(_msgSender(), recipient, amount);
return true;
}
function allowance(address owner, address spender)
public
view
override
returns (uint256)
{
return _allowances[owner][spender];
}
function approve(address spender, uint256 amount)
public
override
returns (bool)
{
_approve(_msgSender(), spender, amount);
return true;
}
function transferFrom(
address sender,
address recipient,
uint256 amount
) public override returns (bool) {
_transfer(sender, recipient, amount);
_approve(
sender,
_msgSender(),
_allowances[sender][_msgSender()].sub(
amount,
"ERC20: transfer amount exceeds allowance"
)
);
return true;
}
function increaseAllowance(address spender, uint256 addedValue)
public
virtual
returns (bool)
{
_approve(
_msgSender(),
spender,
_allowances[_msgSender()][spender] + addedValue
);
return true;
}
function decreaseAllowance(address spender, uint256 subtractedValue)
public
virtual
returns (bool)
{
_approve(
_msgSender(),
spender,
_allowances[_msgSender()][spender].sub(
subtractedValue,
"ERC20: decreased allowance below zero"
)
);
return true;
}
function isExcludedFromReward(address account) public view returns (bool) {
return _isExcluded[account];
}
function deliver(uint256 tAmount) public {
address sender = _msgSender();
require(
!_isExcluded[sender],
"Excluded addresses cannot call this function"
);
valuesFromGetValues memory s = _getValues(tAmount, true);
_rOwned[sender] = _rOwned[sender].sub(s.rAmount);
_rTotal = _rTotal.sub(s.rAmount);
}
function reflectionFromToken(uint256 tAmount, bool deductTransferRfi)
public
view
returns (uint256)
{
require(tAmount <= _tTotal, "Amount must be less than supply");
if (!deductTransferRfi) {
valuesFromGetValues memory s = _getValues(tAmount, true);
return s.rAmount;
} else {
valuesFromGetValues memory s = _getValues(tAmount, true);
return s.rTransferAmount;
}
}
function startTrading() external onlyOwner {
tradingEnabled = true;
swapEnabled = true;
emit TradingEnabled(block.timestamp);
}
function tokenFromReflection(uint256 rAmount)
public
view
returns (uint256)
{
require(
rAmount <= _rTotal,
"Amount must be less than total reflections"
);
uint256 currentRate = _getRate();
return rAmount / currentRate;
}
//@dev kept original RFI naming -> "reward" as in reflection
function excludeFromReward(address account) public onlyOwner {
require(!_isExcluded[account], "Account is already excluded");
if (_rOwned[account] > 0) {
_tOwned[account] = tokenFromReflection(_rOwned[account]);
}
_isExcluded[account] = true;
_excluded.push(account);
}
function includeInReward(address account) external onlyOwner {
require(_isExcluded[account], "Account is not excluded");
for (uint256 i = 0; i < _excluded.length; i++) {
if (_excluded[i] == account) {
_excluded[i] = _excluded[_excluded.length - 1];
_tOwned[account] = 0;
_isExcluded[account] = false;
_excluded.pop();
break;
}
}
}
function excludeFromFee(address account) public onlyOwner {
_isExcludedFromFee[account] = true;
}
function includeInFee(address account) public onlyOwner {
_isExcludedFromFee[account] = false;
}
function isExcludedFromFee(address account) public view returns (bool) {
return _isExcludedFromFee[account];
}
function setMaxWalletPercent(uint256 maxWallPercent) external onlyOwner {
_maxWalletSize = _tTotal.mul(maxWallPercent).div(10**2);
}
function _reflectRfi(uint256 rRfi) private {
_rTotal -= rRfi;
}
function _takeOperations(uint256 rOperations, uint256 tOperations) private {
if (_isExcluded[address(this)]) {
_tOwned[address(this)] += tOperations;
}
_rOwned[address(this)] += rOperations;
}
function _takeLiquidity(uint256 rLiquidity, uint256 tLiquidity) private {
if (_isExcluded[address(this)]) {
_tOwned[address(this)] += tLiquidity;
}
_rOwned[address(this)] += rLiquidity;
}
function _takeBurn(uint256 rBurn, uint256 tBurn) private {
if (_isExcluded[deadAddress]) {
_tOwned[deadAddress] += tBurn;
}
_rOwned[deadAddress] += rBurn;
}
function _getValues(uint256 tAmount, bool takeFee)
private
view
returns (valuesFromGetValues memory to_return)
{
to_return = _getTValues(tAmount, takeFee);
(
to_return.rAmount,
to_return.rTransferAmount,
to_return.rRfi,
to_return.rOperations,
to_return.rBurn,
to_return.rLiquidity
) = _getRValues(to_return, tAmount, takeFee, _getRate());
return to_return;
}
function _getTValues(uint256 tAmount, bool takeFee)
private
pure
returns (valuesFromGetValues memory s)
{
feeRatesStruct memory feeRates = feeRatesStruct({
rfi: 30,
operations: 40,
burn: 20,
liquidity: 10
});
if (!takeFee) {
s.tTransferAmount = tAmount;
return s;
}
s.tRfi = (tAmount * feeRates.rfi) / 1000;
s.tOperations = (tAmount * feeRates.operations) / 1000;
s.tBurn = (tAmount * feeRates.burn) / 1000;
s.tLiquidity = (tAmount * feeRates.liquidity) / 1000;
s.tTransferAmount =
tAmount -
s.tRfi -
s.tOperations -
s.tBurn -
s.tLiquidity;
return s;
}
function _getRValues(
valuesFromGetValues memory s,
uint256 tAmount,
bool takeFee,
uint256 currentRate
)
private
pure
returns (
uint256 rAmount,
uint256 rTransferAmount,
uint256 rRfi,
uint256 rOperations,
uint256 rBurn,
uint256 rLiquidity
)
{
rAmount = tAmount * currentRate;
if (!takeFee) {
return (rAmount, rAmount, 0, 0, 0, 0);
}
rRfi = s.tRfi * currentRate;
rOperations = s.tOperations * currentRate;
rBurn = s.tBurn * currentRate;
rLiquidity = s.tLiquidity * currentRate;
rTransferAmount = rAmount - rRfi - rOperations - rBurn - rLiquidity;
return (rAmount, rTransferAmount, rRfi, rOperations, rBurn, rLiquidity);
}
function _getRate() private view returns (uint256) {
(uint256 rSupply, uint256 tSupply) = _getCurrentSupply();
return rSupply / tSupply;
}
function _getCurrentSupply() private view returns (uint256, uint256) {
uint256 rSupply = _rTotal;
uint256 tSupply = _tTotal;
for (uint256 i = 0; i < _excluded.length; i++) {
if (
_rOwned[_excluded[i]] > rSupply ||
_tOwned[_excluded[i]] > tSupply
) return (_rTotal, _tTotal);
rSupply = rSupply - _rOwned[_excluded[i]];
tSupply = tSupply - _tOwned[_excluded[i]];
}
if (rSupply < _rTotal / _tTotal) return (_rTotal, _tTotal);
return (rSupply, tSupply);
}
function _approve(
address owner,
address spender,
uint256 amount
) private {
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 _transfer(
address from,
address to,
uint256 amount
) private {
require(from != address(0), "ERC20: transfer from the zero address");
require(to != address(0), "ERC20: transfer to the zero address");
require(amount > 0, "Transfer amount must be greater than zero");
require(
amount <= balanceOf(from),
"You are trying to transfer more than your balance"
);
if (!_isExcludedFromFee[from] && !_isExcludedFromFee[to]) {
require(tradingEnabled, "Trading is not enabled yet");
}
if (
from != owner() &&
to != owner() &&
to != address(0) &&
to != address(0xdead) &&
from == pair
) {
require(amount <= maxBuyAmount, "you are exceeding maxBuyAmount");
uint256 walletCurrentBalance = balanceOf(to);
require(
walletCurrentBalance + amount <= _maxWalletSize &&
!_isExcludedFromMaxWallet[from],
"Exceeds maximum wallet token amount"
);
}
if (
from != owner() &&
to != owner() &&
to != address(0) &&
to != address(0xdead) &&
from == pair
) {
require(
amount <= maxSellAmount,
"Amount is exceeding maxSellAmount"
);
}
uint256 contractTokenBalance = balanceOf(address(this));
bool canSwap = contractTokenBalance >= swapTokensAtAmount;
if (!swapping && swapEnabled && canSwap && from != pair) {
swapAndLiquify(swapTokensAtAmount);
}
_tokenTransfer(
from,
to,
amount,
!(_isExcludedFromFee[from] || _isExcludedFromFee[to]) &&
!(to != pair && from != pair) &&
!isSwapNLiq
);
}
//this method is responsible for taking all fee, if takeFee is true
function _tokenTransfer(
address sender,
address recipient,
uint256 tAmount,
bool takeFee
) private {
valuesFromGetValues memory s = _getValues(tAmount, takeFee);
if (_isExcluded[sender]) {
//from excluded
_tOwned[sender] = _tOwned[sender] - tAmount;
}
if (_isExcluded[recipient]) {
//to excluded
_tOwned[recipient] = _tOwned[recipient] + s.tTransferAmount;
}
_rOwned[sender] = _rOwned[sender] - s.rAmount;
_rOwned[recipient] = _rOwned[recipient] + s.rTransferAmount;
_reflectRfi(s.rRfi);
_takeOperations(s.rOperations, s.tOperations);
_takeLiquidity(s.rLiquidity, s.tLiquidity);
_takeBurn(s.rBurn, s.tBurn);
emit Transfer(sender, recipient, s.tTransferAmount);
emit Transfer(sender, address(this), s.tLiquidity + s.tOperations);
emit Transfer(sender, deadAddress, s.tBurn);
}
function swapETHForTokens(uint256 amount) private {
// generate the uniswap pair path of token -> weth
address[] memory path = new address[](2);
path[0] = router.WETH();
path[1] = address(this);
// make the swap
router.swapExactETHForTokensSupportingFeeOnTransferTokens{
value: amount
}(
0, // accept any amount of Tokens
path,
deadAddress, // Burn address
block.timestamp.add(300)
);
}
function swapAndLiquify(uint256 tokens) private lockTheSwap {
isSwapNLiq = true;
feeRatesStruct memory feeRates = feeRatesStruct({
rfi: 30,
operations: 40,
burn: 20,
liquidity: 10
});
// Split the contract balance into halves
uint256 denominator = (feeRates.liquidity + feeRates.operations) * 2;
uint256 tokensToAddLiquidityWith = (tokens * feeRates.liquidity) /
denominator;
uint256 toSwap = tokens - tokensToAddLiquidityWith;
uint256 initialBalance = address(this).balance;
swapTokensForETH(toSwap);
uint256 deltaBalance = address(this).balance - initialBalance;
uint256 unitBalance = deltaBalance / (denominator - feeRates.liquidity);
uint256 ethToAddLiquidityWith = unitBalance * feeRates.liquidity;
if (ethToAddLiquidityWith > 0) {
// Add liquidity to uniswap
addLiquidity(tokensToAddLiquidityWith, ethToAddLiquidityWith);
}
// Send ETH to operationsWallet
uint256 operationsAmt = unitBalance * 2 * feeRates.operations;
if (operationsAmt > 0) {
payable(operationsAddress).transfer(operationsAmt);
}
isSwapNLiq = false;
}
function addLiquidity(uint256 tokenAmount, uint256 ethAmount) private {
// approve token transfer to cover all possible scenarios
_approve(address(this), address(router), tokenAmount);
// add the liquidity
router.addLiquidityETH{value: ethAmount}(
address(this),
tokenAmount,
0, // slippage is unavoidable
0, // slippage is unavoidable
owner(),
block.timestamp
);
}
function swapTokensForETH(uint256 tokenAmount) private {
// generate the uniswap pair path of token -> weth
address[] memory path = new address[](2);
path[0] = address(this);
path[1] = router.WETH();
_approve(address(this), address(router), tokenAmount);
// make the swap
router.swapExactTokensForETHSupportingFeeOnTransferTokens(
tokenAmount,
0, // accept any amount of ETH
path,
address(this),
block.timestamp
);
}
function updateSwapEnabled(bool _enabled) external onlyOwner {
swapEnabled = _enabled;
}
//Emergency swap unlock before ownership renoucement
function rescueLock() external onlyOwner {
swapping = !swapping;
}
//Use this in case ETH are sent to the contract by mistake
function rescueETH(uint256 weiAmount) external onlyOwner {
require(address(this).balance >= weiAmount, "insufficient ETH balance");
payable(msg.sender).transfer(weiAmount);
}
function rescueERC20Tokens(address tokenAddress) external onlyOwner {
IERC20(tokenAddress).transfer(
msg.sender,
IERC20(tokenAddress).balanceOf(address(this))
);
}
/// @dev Update router address in case of uniswap migration
function setRouterAddress(address newRouter) external onlyOwner {
require(newRouter != address(router));
IRouter _newRouter = IRouter(newRouter);
address get_pair = IFactory(_newRouter.factory()).getPair(
address(this),
_newRouter.WETH()
);
if (get_pair == address(0)) {
pair = IFactory(_newRouter.factory()).createPair(
address(this),
_newRouter.WETH()
);
} else {
pair = get_pair;
}
router = _newRouter;
}
receive() external payable {}
}
Read Contract
_maxWalletSize 0x8f9a55c0 → uint256
allowance 0xdd62ed3e → uint256
balanceOf 0x70a08231 → uint256
deadAddress 0x27c8f835 → address
decimals 0x313ce567 → uint8
exchangeLiquidityReserve 0x550e8867 → address
foundationAddress 0xfcf07c6b → address
isExcludedFromFee 0x5342acb4 → bool
isExcludedFromReward 0x88f82020 → bool
manualBurnReserve 0x15abe50f → address
marketingAddress 0xa5ece941 → address
maxBuyAmount 0x88e765ff → uint256
maxSellAmount 0x66d602ae → uint256
name 0x06fdde03 → string
operationsAddress 0xea4cfe12 → address
owner 0x8da5cb5b → address
pair 0xa8aa1b31 → address
reflectionFromToken 0x4549b039 → uint256
router 0xf887ea40 → address
swapEnabled 0x6ddd1713 → bool
swapTokensAtAmount 0xe2f45605 → uint256
symbol 0x95d89b41 → string
tokenFromReflection 0x2d838119 → uint256
totalSupply 0x18160ddd → uint256
tradingEnabled 0x4ada218b → bool
Write Contract 19 functions
These functions modify contract state and require a wallet transaction to execute.
approve 0x095ea7b3
address spender
uint256 amount
returns: bool
decreaseAllowance 0xa457c2d7
address spender
uint256 subtractedValue
returns: bool
deliver 0x3bd5d173
uint256 tAmount
excludeFromFee 0x437823ec
address account
excludeFromReward 0x52390c02
address account
includeInFee 0xea2f0b37
address account
includeInReward 0x3685d419
address account
increaseAllowance 0x39509351
address spender
uint256 addedValue
returns: bool
renounceOwnership 0x715018a6
No parameters
rescueERC20Tokens 0xc3e0f5cf
address tokenAddress
rescueETH 0x9e252f00
uint256 weiAmount
rescueLock 0xb4f5f09e
No parameters
setMaxWalletPercent 0x82bf293c
uint256 maxWallPercent
setRouterAddress 0x41cb87fc
address newRouter
startTrading 0x293230b8
No parameters
transfer 0xa9059cbb
address recipient
uint256 amount
returns: bool
transferFrom 0x23b872dd
address sender
address recipient
uint256 amount
returns: bool
transferOwnership 0xf2fde38b
address newOwner
updateSwapEnabled 0x924de9b7
bool _enabled
Token Balances (1)
View Transfers →Recent Transactions
No transactions found for this address