Address Contract Verified
Address
0xeefa611C0Eb6c8285a0eAee76ad39ca389fc754b
Balance
0 ETH
Nonce
1
Code Size
15143 bytes
Creator
0x190E7CB9...d7Fe at tx 0x219dc092...79a936
Indexed Transactions
0
Contract Bytecode
15143 bytes
0x6080604052600436106101e6575f3560e01c8063741bef1a11610101578063b94c3e5811610094578063ee99205c11610063578063ee99205c146105f5578063f2fde38b1461061f578063fbbab46f14610647578063fc0c546a1461066f576101f5565b8063b94c3e581461055d578063bb846afc14610567578063c031a66f14610591578063d897833e146105cd576101f5565b806392929a09116100d057806392929a09146104bb5780639dd373b9146104e3578063a7c601601461050b578063b652dc2f14610533576101f5565b8063741bef1a14610413578063777e0d861461043d5780638da5cb5b146104675780639106d7ba14610491576101f5565b8063380d831b1161017957806348c54b9d1161014857806348c54b9d146103a757806368428a1b146103bd57806369b372f1146103e7578063715018a6146103fd576101f5565b8063380d831b146103275780633a03171c1461033d5780633ccfd60b146103675780634626402b1461037d576101f5565b806328f5c7b3116101b557806328f5c7b31461027f57806329318897146102a95780632f48ab7d146102d357806333898082146102fd576101f5565b806308c89b6d146101f957806313ddf06d14610223578063150d283d1461024b5780632866ed2114610255576101f5565b366101f5576101f3610699565b005b5f80fd5b348015610204575f80fd5b5061020d610c35565b60405161021a9190612baf565b60405180910390f35b34801561022e575f80fd5b5061024960048036038101906102449190612bf6565b610c3b565b005b610253610d3a565b005b348015610260575f80fd5b50610269611153565b6040516102769190612c3b565b60405180910390f35b34801561028a575f80fd5b50610293611166565b6040516102a09190612baf565b60405180910390f35b3480156102b4575f80fd5b506102bd61116c565b6040516102ca9190612baf565b60405180910390f35b3480156102de575f80fd5b506102e76111ad565b6040516102f49190612cce565b60405180910390f35b348015610308575f80fd5b506103116111d2565b60405161031e9190612baf565b60405180910390f35b348015610332575f80fd5b5061033b6111d8565b005b348015610348575f80fd5b506103516113b2565b60405161035e9190612baf565b60405180910390f35b348015610372575f80fd5b5061037b6113c1565b005b348015610388575f80fd5b50610391611518565b60405161039e9190612d07565b60405180910390f35b3480156103b2575f80fd5b506103bb61153d565b005b3480156103c8575f80fd5b506103d161177d565b6040516103de9190612c3b565b60405180910390f35b3480156103f2575f80fd5b506103fb61178f565b005b348015610408575f80fd5b50610411611985565b005b34801561041e575f80fd5b50610427611abb565b6040516104349190612d40565b60405180910390f35b348015610448575f80fd5b50610451611ae0565b60405161045e9190612baf565b60405180910390f35b348015610472575f80fd5b5061047b611b94565b6040516104889190612d07565b60405180910390f35b34801561049c575f80fd5b506104a5611bbb565b6040516104b29190612baf565b60405180910390f35b3480156104c6575f80fd5b506104e160048036038101906104dc9190612d83565b611bc1565b005b3480156104ee575f80fd5b5061050960048036038101906105049190612dd8565b611c91565b005b348015610516575f80fd5b50610531600480360381019061052c9190612bf6565b611dbe565b005b34801561053e575f80fd5b506105476121c5565b6040516105549190612baf565b60405180910390f35b610565610699565b005b348015610572575f80fd5b5061057b6121e0565b6040516105889190612baf565b60405180910390f35b34801561059c575f80fd5b506105b760048036038101906105b29190612dd8565b61223f565b6040516105c49190612baf565b60405180910390f35b3480156105d8575f80fd5b506105f360048036038101906105ee9190612d83565b612254565b005b348015610600575f80fd5b506106096122ec565b6040516106169190612d07565b60405180910390f35b34801561062a575f80fd5b5061064560048036038101906106409190612dd8565b612311565b005b348015610652575f80fd5b5061066d60048036038101906106689190612bf6565b6124b6565b005b34801561067a575f80fd5b50610683612a40565b6040516106909190612cce565b60405180910390f35b600a5f9054906101000a900460ff166106e7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106de90612e5d565b60405180910390fd5b5f3411610729576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161072090612ec5565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16036107b8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107af90612f2d565b60405180910390fd5b5f3490505f6107c56121e0565b90505f6107fc670de0b6b3a76400006107ee6107df611ae0565b86612a6590919063ffffffff16565b612adc90919063ffffffff16565b90506a0640e46bd3bb566500000061081d8284612b3390919063ffffffff16565b111561085e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161085590612f95565b60405180910390fd5b5f61086761116c565b90505f61089782610889670de0b6b3a764000088612a6590919063ffffffff16565b612adc90919063ffffffff16565b90508060015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b81526004016108f49190612d07565b602060405180830381865afa15801561090f573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906109339190612fc7565b1015610974576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161096b9061303c565b60405180910390fd5b61098985600654612b3390919063ffffffff16565b6006819055505f60045f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16866040516109d590613087565b5f6040518083038185875af1925050503d805f8114610a0f576040519150601f19603f3d011682016040523d82523d5f602084013e610a14565b606091505b5050905080610a58576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a4f906130e5565b60405180910390fd5b60015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16846040518363ffffffff1660e01b8152600401610ad5929190613103565b6020604051808303815f875af1158015610af1573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610b15919061313e565b610b54576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b4b906131b3565b60405180910390fd5b60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16632ee4090833846040518363ffffffff1660e01b8152600401610bb0929190613103565b5f604051808303815f87803b158015610bc7575f80fd5b505af1158015610bd9573d5f803e3d5ffd5b505050503373ffffffffffffffffffffffffffffffffffffffff167f75a97a2c2b68ec443f2d6b0af3de2b40369af4be304d0dfce33038b566601bfe8388604051610c2592919061321b565b60405180910390a2505050505050565b60075481565b610c43612b90565b73ffffffffffffffffffffffffffffffffffffffff16610c61611b94565b73ffffffffffffffffffffffffffffffffffffffff1614610cb7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cae9061329f565b60405180910390fd5b5f8111610cf9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cf090613307565b60405180910390fd5b806009819055507f6b361c807733cc94a3b7bda39c1c94dcc0511e91aa47b0f7f918068e9397689081604051610d2f9190612baf565b60405180910390a150565b600a5f9054906101000a900460ff16610d88576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d7f90612e5d565b60405180910390fd5b5f3411610dca576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dc190612ec5565b60405180910390fd5b5f3490505f610dd76121e0565b90505f610e0e670de0b6b3a7640000610e00610df1611ae0565b86612a6590919063ffffffff16565b612adc90919063ffffffff16565b90506a0640e46bd3bb5665000000610e2f8284612b3390919063ffffffff16565b1115610e70576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e6790612f95565b60405180910390fd5b5f610e7961116c565b90505f610ea982610e9b670de0b6b3a764000088612a6590919063ffffffff16565b612adc90919063ffffffff16565b90508060015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401610f069190612d07565b602060405180830381865afa158015610f21573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610f459190612fc7565b1015610f86576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f7d9061336f565b60405180910390fd5b610f9b85600654612b3390919063ffffffff16565b600681905550610ff181600b5f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054612b3390919063ffffffff16565b600b5f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055505f60045f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168660405161107890613087565b5f6040518083038185875af1925050503d805f81146110b2576040519150601f19603f3d011682016040523d82523d5f602084013e6110b7565b606091505b50509050806110fb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110f2906130e5565b60405180910390fd5b3373ffffffffffffffffffffffffffffffffffffffff167fe277b208662ca07e3fb98c44e06ee31ba18ba82768e31cdbfc20dd489564b00b838860405161114392919061321b565b60405180910390a2505050505050565b600a60019054906101000a900460ff1681565b60065481565b5f80611176611ae0565b90506111a781611199670de0b6b3a7640000600954612a6590919063ffffffff16565b612adc90919063ffffffff16565b91505090565b60025f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60095481565b6111e0612b90565b73ffffffffffffffffffffffffffffffffffffffff166111fe611b94565b73ffffffffffffffffffffffffffffffffffffffff1614611254576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161124b9061329f565b60405180910390fd5b5f60015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b81526004016112af9190612d07565b602060405180830381865afa1580156112ca573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906112ee9190612fc7565b90505f8111156113965760015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb33836040518363ffffffff1660e01b8152600401611354929190613103565b6020604051808303815f875af1158015611370573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611394919061313e565b505b5f600a5f6101000a81548160ff02191690831515021790555050565b6a0640e46bd3bb566500000081565b6113c9612b90565b73ffffffffffffffffffffffffffffffffffffffff166113e7611b94565b73ffffffffffffffffffffffffffffffffffffffff161461143d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114349061329f565b60405180910390fd5b5f4790505f8111611483576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161147a906133d7565b60405180910390fd5b3373ffffffffffffffffffffffffffffffffffffffff166108fc8290811502906040515f60405180830381858888f193505050501580156114c6573d5f803e3d5ffd5b503373ffffffffffffffffffffffffffffffffffffffff167f884edad9ce6fa2440d8a54cc123490eb96d2768479d49ff9c7366125a94243648260405161150d9190612baf565b60405180910390a250565b60045f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600a60019054906101000a900460ff1661158c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115839061343f565b60405180910390fd5b5f600b5f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205490505f811161160f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611606906134a7565b60405180910390fd5b5f600b5f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f208190555060015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb33836040518363ffffffff1660e01b81526004016116ad929190613103565b6020604051808303815f875af11580156116c9573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906116ed919061313e565b61172c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117239061350f565b60405180910390fd5b3373ffffffffffffffffffffffffffffffffffffffff167f896e034966eaaf1adc54acc0f257056febbd300c9e47182cf761982cf1f5e430826040516117729190612baf565b60405180910390a250565b600a5f9054906101000a900460ff1681565b611797612b90565b73ffffffffffffffffffffffffffffffffffffffff166117b5611b94565b73ffffffffffffffffffffffffffffffffffffffff161461180b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118029061329f565b60405180910390fd5b5f60015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b81526004016118669190612d07565b602060405180830381865afa158015611881573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906118a59190612fc7565b905060015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb33836040518363ffffffff1660e01b8152600401611903929190613103565b6020604051808303815f875af115801561191f573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611943919061313e565b611982576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119799061350f565b60405180910390fd5b50565b61198d612b90565b73ffffffffffffffffffffffffffffffffffffffff166119ab611b94565b73ffffffffffffffffffffffffffffffffffffffff1614611a01576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119f89061329f565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff165f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35f805f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b60035f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b5f8060035f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663feaf968c6040518163ffffffff1660e01b815260040160a060405180830381865afa158015611b4c573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611b70919061359f565b505050915050611b8e6402540be40082612a6590919063ffffffff16565b91505090565b5f805f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60085481565b611bc9612b90565b73ffffffffffffffffffffffffffffffffffffffff16611be7611b94565b73ffffffffffffffffffffffffffffffffffffffff1614611c3d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c349061329f565b60405180910390fd5b80600a60016101000a81548160ff0219169083151502179055507f0ea6d908123142455783f75e44b94efc09959f5d0e069c4ba0c93b7605fe125181604051611c869190612c3b565b60405180910390a150565b611c99612b90565b73ffffffffffffffffffffffffffffffffffffffff16611cb7611b94565b73ffffffffffffffffffffffffffffffffffffffff1614611d0d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d049061329f565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611d7b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d7290613660565b60405180910390fd5b8060055f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600a5f9054906101000a900460ff16611e0c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e0390612e5d565b60405180910390fd5b5f8111611e4e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e45906136c8565b60405180910390fd5b5f611e576121e0565b90506a0640e46bd3bb5665000000611e788383612b3390919063ffffffff16565b1115611eb9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611eb090612f95565b60405180910390fd5b5f611ee9600954611edb670de0b6b3a764000086612a6590919063ffffffff16565b612adc90919063ffffffff16565b90508060015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401611f469190612d07565b602060405180830381865afa158015611f61573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611f859190612fc7565b1015611fc6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fbd9061336f565b60405180910390fd5b611fdb83600754612b3390919063ffffffff16565b60078190555061203181600b5f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054612b3390919063ffffffff16565b600b5f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f208190555060025f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166323b872dd3360045f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16866040518463ffffffff1660e01b81526004016120f1939291906136e6565b6020604051808303815f875af115801561210d573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612131919061313e565b612170576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161216790613765565b60405180910390fd5b3373ffffffffffffffffffffffffffffffffffffffff167fe277b208662ca07e3fb98c44e06ee31ba18ba82768e31cdbfc20dd489564b00b82856040516121b89291906137cd565b60405180910390a2505050565b60646a0640e46bd3bb56650000006121dd9190613861565b81565b5f806121ea611ae0565b90505f61221c670de0b6b3a764000061220e84600654612a6590919063ffffffff16565b612adc90919063ffffffff16565b90505f60075490506122378183612b3390919063ffffffff16565b935050505090565b600b602052805f5260405f205f915090505481565b61225c612b90565b73ffffffffffffffffffffffffffffffffffffffff1661227a611b94565b73ffffffffffffffffffffffffffffffffffffffff16146122d0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122c79061329f565b60405180910390fd5b80600a5f6101000a81548160ff02191690831515021790555050565b60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b612319612b90565b73ffffffffffffffffffffffffffffffffffffffff16612337611b94565b73ffffffffffffffffffffffffffffffffffffffff161461238d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123849061329f565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036123fb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123f290613901565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff165f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3805f806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600a5f9054906101000a900460ff16612504576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124fb90612e5d565b60405180910390fd5b5f8111612546576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161253d906136c8565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16036125d5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125cc90612f2d565b60405180910390fd5b5f6125de6121e0565b90506a0640e46bd3bb56650000006125ff8383612b3390919063ffffffff16565b1115612640576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161263790612f95565b60405180910390fd5b5f612670600954612662670de0b6b3a764000086612a6590919063ffffffff16565b612adc90919063ffffffff16565b90508060015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b81526004016126cd9190612d07565b602060405180830381865afa1580156126e8573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061270c9190612fc7565b101561274d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127449061303c565b60405180910390fd5b61276283600754612b3390919063ffffffff16565b60078190555060025f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166323b872dd3360045f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16866040518463ffffffff1660e01b81526004016127e7939291906136e6565b6020604051808303815f875af1158015612803573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612827919061313e565b612866576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161285d90613765565b60405180910390fd5b60015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16836040518363ffffffff1660e01b81526004016128e3929190613103565b6020604051808303815f875af11580156128ff573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612923919061313e565b612962576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612959906131b3565b60405180910390fd5b60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16632ee4090833836040518363ffffffff1660e01b81526004016129be929190613103565b5f604051808303815f87803b1580156129d5575f80fd5b505af11580156129e7573d5f803e3d5ffd5b505050503373ffffffffffffffffffffffffffffffffffffffff167f75a97a2c2b68ec443f2d6b0af3de2b40369af4be304d0dfce33038b566601bfe8285604051612a339291906137cd565b60405180910390a2505050565b60015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b5f808303612a75575f9050612ad6565b5f8284612a82919061391f565b9050828482612a919190613861565b14612ad1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ac8906139d0565b60405180910390fd5b809150505b92915050565b5f808211612b1f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b1690613a38565b60405180910390fd5b8183612b2b9190613861565b905092915050565b5f808284612b419190613a56565b905083811015612b86576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b7d90613ad3565b60405180910390fd5b8091505092915050565b5f33905090565b5f819050919050565b612ba981612b97565b82525050565b5f602082019050612bc25f830184612ba0565b92915050565b5f80fd5b612bd581612b97565b8114612bdf575f80fd5b50565b5f81359050612bf081612bcc565b92915050565b5f60208284031215612c0b57612c0a612bc8565b5b5f612c1884828501612be2565b91505092915050565b5f8115159050919050565b612c3581612c21565b82525050565b5f602082019050612c4e5f830184612c2c565b92915050565b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f819050919050565b5f612c96612c91612c8c84612c54565b612c73565b612c54565b9050919050565b5f612ca782612c7c565b9050919050565b5f612cb882612c9d565b9050919050565b612cc881612cae565b82525050565b5f602082019050612ce15f830184612cbf565b92915050565b5f612cf182612c54565b9050919050565b612d0181612ce7565b82525050565b5f602082019050612d1a5f830184612cf8565b92915050565b5f612d2a82612c9d565b9050919050565b612d3a81612d20565b82525050565b5f602082019050612d535f830184612d31565b92915050565b612d6281612c21565b8114612d6c575f80fd5b50565b5f81359050612d7d81612d59565b92915050565b5f60208284031215612d9857612d97612bc8565b5b5f612da584828501612d6f565b91505092915050565b612db781612ce7565b8114612dc1575f80fd5b50565b5f81359050612dd281612dae565b92915050565b5f60208284031215612ded57612dec612bc8565b5b5f612dfa84828501612dc4565b91505092915050565b5f82825260208201905092915050565b7f53616c65206e6f742061637469766500000000000000000000000000000000005f82015250565b5f612e47600f83612e03565b9150612e5282612e13565b602082019050919050565b5f6020820190508181035f830152612e7481612e3b565b9050919050565b7f4e6f204554482073656e740000000000000000000000000000000000000000005f82015250565b5f612eaf600b83612e03565b9150612eba82612e7b565b602082019050919050565b5f6020820190508181035f830152612edc81612ea3565b9050919050565b7f5374616b696e67206e6f742073657400000000000000000000000000000000005f82015250565b5f612f17600f83612e03565b9150612f2282612ee3565b602082019050919050565b5f6020820190508181035f830152612f4481612f0b565b9050919050565b7f48617264206361702072656163686564000000000000000000000000000000005f82015250565b5f612f7f601083612e03565b9150612f8a82612f4b565b602082019050919050565b5f6020820190508181035f830152612fac81612f73565b9050919050565b5f81519050612fc181612bcc565b92915050565b5f60208284031215612fdc57612fdb612bc8565b5b5f612fe984828501612fb3565b91505092915050565b7f4e6f7420656e6f75676820746f6b656e7320696e2070726573616c65000000005f82015250565b5f613026601c83612e03565b915061303182612ff2565b602082019050919050565b5f6020820190508181035f8301526130538161301a565b9050919050565b5f81905092915050565b50565b5f6130725f8361305a565b915061307d82613064565b5f82019050919050565b5f61309182613067565b9150819050919050565b7f455448207472616e73666572206661696c6564000000000000000000000000005f82015250565b5f6130cf601383612e03565b91506130da8261309b565b602082019050919050565b5f6020820190508181035f8301526130fc816130c3565b9050919050565b5f6040820190506131165f830185612cf8565b6131236020830184612ba0565b9392505050565b5f8151905061313881612d59565b92915050565b5f6020828403121561315357613152612bc8565b5b5f6131608482850161312a565b91505092915050565b7f546f6b656e207472616e7366657220746f207374616b696e67206661696c65645f82015250565b5f61319d602083612e03565b91506131a882613169565b602082019050919050565b5f6020820190508181035f8301526131ca81613191565b9050919050565b7f45544800000000000000000000000000000000000000000000000000000000005f82015250565b5f613205600383612e03565b9150613210826131d1565b602082019050919050565b5f60608201905061322e5f830185612ba0565b61323b6020830184612ba0565b818103604083015261324c816131f9565b90509392505050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65725f82015250565b5f613289602083612e03565b915061329482613255565b602082019050919050565b5f6020820190508181035f8301526132b68161327d565b9050919050565b7f496e76616c6964207072696365000000000000000000000000000000000000005f82015250565b5f6132f1600d83612e03565b91506132fc826132bd565b602082019050919050565b5f6020820190508181035f83015261331e816132e5565b9050919050565b7f4e6f7420656e6f75676820746f6b656e730000000000000000000000000000005f82015250565b5f613359601183612e03565b915061336482613325565b602082019050919050565b5f6020820190508181035f8301526133868161334d565b9050919050565b7f4e6f2045544820746f20776974686472617700000000000000000000000000005f82015250565b5f6133c1601283612e03565b91506133cc8261338d565b602082019050919050565b5f6020820190508181035f8301526133ee816133b5565b9050919050565b7f436c61696d206e6f7420656e61626c65640000000000000000000000000000005f82015250565b5f613429601183612e03565b9150613434826133f5565b602082019050919050565b5f6020820190508181035f8301526134568161341d565b9050919050565b7f4e6f20746f6b656e7320746f20636c61696d00000000000000000000000000005f82015250565b5f613491601283612e03565b915061349c8261345d565b602082019050919050565b5f6020820190508181035f8301526134be81613485565b9050919050565b7f546f6b656e207472616e73666572206661696c656400000000000000000000005f82015250565b5f6134f9601583612e03565b9150613504826134c5565b602082019050919050565b5f6020820190508181035f830152613526816134ed565b9050919050565b5f69ffffffffffffffffffff82169050919050565b61354b8161352d565b8114613555575f80fd5b50565b5f8151905061356681613542565b92915050565b5f819050919050565b61357e8161356c565b8114613588575f80fd5b50565b5f8151905061359981613575565b92915050565b5f805f805f60a086880312156135b8576135b7612bc8565b5b5f6135c588828901613558565b95505060206135d68882890161358b565b94505060406135e788828901612fb3565b93505060606135f888828901612fb3565b925050608061360988828901613558565b9150509295509295909350565b7f496e76616c6964207374616b696e6700000000000000000000000000000000005f82015250565b5f61364a600f83612e03565b915061365582613616565b602082019050919050565b5f6020820190508181035f8301526136778161363e565b9050919050565b7f496e76616c6964205553445420616d6f756e74000000000000000000000000005f82015250565b5f6136b2601383612e03565b91506136bd8261367e565b602082019050919050565b5f6020820190508181035f8301526136df816136a6565b9050919050565b5f6060820190506136f95f830186612cf8565b6137066020830185612cf8565b6137136040830184612ba0565b949350505050565b7f55534454207472616e73666572206661696c65640000000000000000000000005f82015250565b5f61374f601483612e03565b915061375a8261371b565b602082019050919050565b5f6020820190508181035f83015261377c81613743565b9050919050565b7f55534454000000000000000000000000000000000000000000000000000000005f82015250565b5f6137b7600483612e03565b91506137c282613783565b602082019050919050565b5f6060820190506137e05f830185612ba0565b6137ed6020830184612ba0565b81810360408301526137fe816137ab565b90509392505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f61386b82612b97565b915061387683612b97565b92508261388657613885613807565b5b828204905092915050565b7f4f776e61626c653a206e6577206f776e6572206973207a65726f2061646472655f8201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b5f6138eb602283612e03565b91506138f682613891565b604082019050919050565b5f6020820190508181035f830152613918816138df565b9050919050565b5f61392982612b97565b915061393483612b97565b925082820261394281612b97565b9150828204841483151761395957613958613834565b5b5092915050565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f5f8201527f7700000000000000000000000000000000000000000000000000000000000000602082015250565b5f6139ba602183612e03565b91506139c582613960565b604082019050919050565b5f6020820190508181035f8301526139e7816139ae565b9050919050565b7f536166654d6174683a206469766973696f6e206279207a65726f0000000000005f82015250565b5f613a22601a83612e03565b9150613a2d826139ee565b602082019050919050565b5f6020820190508181035f830152613a4f81613a16565b9050919050565b5f613a6082612b97565b9150613a6b83612b97565b9250828201905080821115613a8357613a82613834565b5b92915050565b7f536166654d6174683a206164646974696f6e206f766572666c6f7700000000005f82015250565b5f613abd601b83612e03565b9150613ac882613a89565b602082019050919050565b5f6020820190508181035f830152613aea81613ab1565b905091905056fea2646970667358221220dba89beb4709a05f8befb7ac4c1f7bcb8a3ceba04cab60beb112ac6ac5321bae64736f6c63430008180033
Verified Source Code Full Match
Compiler: v0.8.24+commit.e11b9ed9
EVM: shanghai
Optimization: No
PresaleStake.sol 312 lines
// SPDX-License-Identifier: MIT
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 transferFrom(address sender, 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);
event Transfer(address indexed from, address indexed to, uint256 value);
event Approval(address indexed owner, address indexed spender, uint256 value);
}
interface AggregatorV3Interface {
function latestRoundData()
external
view
returns (
uint80 roundId,
int256 answer,
uint256 startedAt,
uint256 updatedAt,
uint80 answeredInRound
);
}
abstract contract Context {
function _msgSender() internal view virtual returns (address) {
return msg.sender;
}
function _msgData() internal view virtual returns (bytes calldata) {
return msg.data;
}
}
abstract contract Ownable is Context {
address private _owner;
event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);
constructor() {
_owner = _msgSender();
emit OwnershipTransferred(address(0), _owner);
}
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 {
emit OwnershipTransferred(_owner, address(0));
_owner = address(0);
}
function transferOwnership(address newOwner) public virtual onlyOwner {
require(newOwner != address(0), "Ownable: new owner is zero address");
emit OwnershipTransferred(_owner, newOwner);
_owner = newOwner;
}
}
library SafeMath {
function add(uint256 a, uint256 b) internal pure returns (uint256) {
uint256 c = a + b;
require(c >= a, "SafeMath: addition overflow");
return c;
}
function sub(uint256 a, uint256 b) internal pure returns (uint256) {
require(b <= a, "SafeMath: subtraction overflow");
return a - b;
}
function mul(uint256 a, uint256 b) internal pure returns (uint256) {
if (a == 0) return 0;
uint256 c = a * b;
require(c / a == b, "SafeMath: multiplication overflow");
return c;
}
function div(uint256 a, uint256 b) internal pure returns (uint256) {
require(b > 0, "SafeMath: division by zero");
return a / b;
}
}
/* Minimal interface to interact with the staking contract */
interface IStaking {
function stakeFor(address user, uint256 amount) external;
}
contract TokenPreSale is Ownable {
using SafeMath for uint256;
IERC20 public token;
IERC20 public usdt;
AggregatorV3Interface public priceFeed;
address public treasuryWallet;
address public stakingContract; // new
// Hard cap and soft cap (both in USD value, 18 decimals)
uint256 public constant HARD_CAP = 7_560_000 * 1e18; // $7,560,000
uint256 public constant SOFT_CAP = HARD_CAP / 100; // $75,600
uint256 public totalETHRaised;
uint256 public totalUSDTRaised;
uint256 public totalSold;
// Token price set to $0.000005 per token
uint256 public tokenPriceInUSDT = 0.000005 ether;
bool public saleActive = true;
bool public claimEnabled = false;
mapping(address => uint256) public pendingTokens;
event Sell(address indexed buyer, uint256 tokenAmount, uint256 value, string paymentMethod);
event SellAndStake(address indexed buyer, uint256 tokenAmount, uint256 value, string paymentMethod);
event Withdraw(address indexed owner, uint256 amount);
event ClaimStatusChanged(bool newStatus);
event TokenPriceUpdated(uint256 newPrice);
event TokensClaimed(address indexed user, uint256 amount);
constructor(
address _token,
address _usdt,
address _priceFeed,
address _treasuryWallet,
address _stakingContract
) {
require(_token != address(0), "Invalid token address");
require(_usdt != address(0), "Invalid USDT address");
require(_priceFeed != address(0), "Invalid price feed address");
require(_treasuryWallet != address(0), "Invalid treasury address");
require(_stakingContract != address(0), "Invalid staking address");
token = IERC20(_token);
usdt = IERC20(_usdt);
priceFeed = AggregatorV3Interface(_priceFeed);
treasuryWallet = _treasuryWallet;
stakingContract = _stakingContract;
}
receive() external payable {
buyAndStakeWithETH();
}
// ==================== PRICE HELPERS ====================
function getLatestETHPrice() public view returns (uint256) {
(, int256 price, , , ) = priceFeed.latestRoundData();
return uint256(price).mul(1e10); // convert from 8 to 18 decimals
}
function getTokenPriceInETH() public view returns (uint256) {
uint256 ethPriceInUSD = getLatestETHPrice();
return tokenPriceInUSDT.mul(1e18).div(ethPriceInUSD);
}
function getTotalRaisedInUSD() public view returns (uint256) {
uint256 ethUSD = getLatestETHPrice(); // 1 ETH = X USD (18 decimals)
uint256 totalETHinUSD = totalETHRaised.mul(ethUSD).div(1e18);
uint256 totalUSDTinUSD = totalUSDTRaised; // USDT already 1:1 USD
return totalETHinUSD.add(totalUSDTinUSD);
}
// ==================== BUY WITH ETH ====================
function buyWithETH() public payable {
require(saleActive, "Sale not active");
require(msg.value > 0, "No ETH sent");
uint256 ethAmount = msg.value;
uint256 newRaisedUSD = getTotalRaisedInUSD();
uint256 ethValueUSD = ethAmount.mul(getLatestETHPrice()).div(1e18);
require(newRaisedUSD.add(ethValueUSD) <= HARD_CAP, "Hard cap reached");
uint256 tokenPriceInETH = getTokenPriceInETH();
uint256 tokenAmount = ethAmount.mul(1e18).div(tokenPriceInETH);
require(token.balanceOf(address(this)) >= tokenAmount, "Not enough tokens");
totalETHRaised = totalETHRaised.add(ethAmount);
pendingTokens[msg.sender] = pendingTokens[msg.sender].add(tokenAmount);
(bool success, ) = treasuryWallet.call{value: ethAmount}("");
require(success, "ETH transfer failed");
emit Sell(msg.sender, tokenAmount, ethAmount, "ETH");
}
// ==================== BUY WITH USDT ====================
function buyWithUSDT(uint256 usdtAmount) public {
require(saleActive, "Sale not active");
require(usdtAmount > 0, "Invalid USDT amount");
uint256 newRaisedUSD = getTotalRaisedInUSD();
require(newRaisedUSD.add(usdtAmount) <= HARD_CAP, "Hard cap reached");
uint256 tokenAmount = usdtAmount.mul(1e18).div(tokenPriceInUSDT);
require(token.balanceOf(address(this)) >= tokenAmount, "Not enough tokens");
totalUSDTRaised = totalUSDTRaised.add(usdtAmount);
pendingTokens[msg.sender] = pendingTokens[msg.sender].add(tokenAmount);
require(usdt.transferFrom(msg.sender, treasuryWallet, usdtAmount), "USDT transfer failed");
emit Sell(msg.sender, tokenAmount, usdtAmount, "USDT");
}
// ==================== NEW: BUY AND STAKE WITH ETH ====================
function buyAndStakeWithETH() public payable {
require(saleActive, "Sale not active");
require(msg.value > 0, "No ETH sent");
require(stakingContract != address(0), "Staking not set");
uint256 ethAmount = msg.value;
uint256 newRaisedUSD = getTotalRaisedInUSD();
uint256 ethValueUSD = ethAmount.mul(getLatestETHPrice()).div(1e18);
require(newRaisedUSD.add(ethValueUSD) <= HARD_CAP, "Hard cap reached");
uint256 tokenPriceInETH = getTokenPriceInETH();
uint256 tokenAmount = ethAmount.mul(1e18).div(tokenPriceInETH);
require(token.balanceOf(address(this)) >= tokenAmount, "Not enough tokens in presale");
totalETHRaised = totalETHRaised.add(ethAmount);
// Transfer ETH immediately to treasury
(bool success, ) = treasuryWallet.call{value: ethAmount}("");
require(success, "ETH transfer failed");
// Transfer tokens from presale contract to staking contract
require(token.transfer(stakingContract, tokenAmount), "Token transfer to staking failed");
// Call staking contract to record the stake on behalf of buyer
IStaking(stakingContract).stakeFor(msg.sender, tokenAmount);
emit SellAndStake(msg.sender, tokenAmount, ethAmount, "ETH");
}
// ==================== NEW: BUY AND STAKE WITH USDT ====================
function buyAndStakeWithUSDT(uint256 usdtAmount) public {
require(saleActive, "Sale not active");
require(usdtAmount > 0, "Invalid USDT amount");
require(stakingContract != address(0), "Staking not set");
uint256 newRaisedUSD = getTotalRaisedInUSD();
require(newRaisedUSD.add(usdtAmount) <= HARD_CAP, "Hard cap reached");
uint256 tokenAmount = usdtAmount.mul(1e18).div(tokenPriceInUSDT);
require(token.balanceOf(address(this)) >= tokenAmount, "Not enough tokens in presale");
totalUSDTRaised = totalUSDTRaised.add(usdtAmount);
// Transfer USDT to treasury
require(usdt.transferFrom(msg.sender, treasuryWallet, usdtAmount), "USDT transfer failed");
// Transfer tokens from presale contract to staking contract
require(token.transfer(stakingContract, tokenAmount), "Token transfer to staking failed");
// Call staking contract to record the stake on behalf of buyer
IStaking(stakingContract).stakeFor(msg.sender, tokenAmount);
emit SellAndStake(msg.sender, tokenAmount, usdtAmount, "USDT");
}
// ==================== CLAIM TOKENS ====================
function claimTokens() public {
require(claimEnabled, "Claim not enabled");
uint256 amount = pendingTokens[msg.sender];
require(amount > 0, "No tokens to claim");
pendingTokens[msg.sender] = 0;
require(token.transfer(msg.sender, amount), "Token transfer failed");
emit TokensClaimed(msg.sender, amount);
}
// ==================== ADMIN FUNCTIONS ====================
function setClaimEnabled(bool _enabled) external onlyOwner {
claimEnabled = _enabled;
emit ClaimStatusChanged(_enabled);
}
function withdraw() public onlyOwner {
uint256 balance = address(this).balance;
require(balance > 0, "No ETH to withdraw");
payable(msg.sender).transfer(balance);
emit Withdraw(msg.sender, balance);
}
function setSaleStatus(bool _status) external onlyOwner {
saleActive = _status;
}
function endSale() public onlyOwner {
uint256 remaining = token.balanceOf(address(this));
if (remaining > 0) token.transfer(msg.sender, remaining);
saleActive = false;
}
function updateTokenPriceInUSDT(uint256 _newPrice) external onlyOwner {
require(_newPrice > 0, "Invalid price");
tokenPriceInUSDT = _newPrice;
emit TokenPriceUpdated(_newPrice);
}
function emergencyWithdrawTokens() external onlyOwner {
uint256 remaining = token.balanceOf(address(this));
require(token.transfer(msg.sender, remaining), "Token transfer failed");
}
function setStakingContract(address _staking) external onlyOwner {
require(_staking != address(0), "Invalid staking");
stakingContract = _staking;
}
}
Read Contract
HARD_CAP 0x3a03171c → uint256
SOFT_CAP 0xb652dc2f → uint256
claimEnabled 0x2866ed21 → bool
getLatestETHPrice 0x777e0d86 → uint256
getTokenPriceInETH 0x29318897 → uint256
getTotalRaisedInUSD 0xbb846afc → uint256
owner 0x8da5cb5b → address
pendingTokens 0xc031a66f → uint256
priceFeed 0x741bef1a → address
saleActive 0x68428a1b → bool
stakingContract 0xee99205c → address
token 0xfc0c546a → address
tokenPriceInUSDT 0x33898082 → uint256
totalETHRaised 0x28f5c7b3 → uint256
totalSold 0x9106d7ba → uint256
totalUSDTRaised 0x08c89b6d → uint256
treasuryWallet 0x4626402b → address
usdt 0x2f48ab7d → address
Write Contract 14 functions
These functions modify contract state and require a wallet transaction to execute.
buyAndStakeWithETH 0xb94c3e58
No parameters
buyAndStakeWithUSDT 0xfbbab46f
uint256 usdtAmount
buyWithETH 0x150d283d
No parameters
buyWithUSDT 0xa7c60160
uint256 usdtAmount
claimTokens 0x48c54b9d
No parameters
emergencyWithdrawTokens 0x69b372f1
No parameters
endSale 0x380d831b
No parameters
renounceOwnership 0x715018a6
No parameters
setClaimEnabled 0x92929a09
bool _enabled
setSaleStatus 0xd897833e
bool _status
setStakingContract 0x9dd373b9
address _staking
transferOwnership 0xf2fde38b
address newOwner
updateTokenPriceInUSDT 0x13ddf06d
uint256 _newPrice
withdraw 0x3ccfd60b
No parameters
Recent Transactions
No transactions found for this address