Address Contract Verified
Address
0x112Dd13414e50cF72e855f863a1df6e509f87806
Balance
0 ETH
Nonce
1
Code Size
11320 bytes
Creator
0x61aEdDaC...74fA at tx 0xe92cd0b6...4926fa
Indexed Transactions
0
Contract Bytecode
11320 bytes
0x60806040526004361061028b575f3560e01c80638b19037611610155578063d1e76063116100be578063e8307d0011610078578063e8307d00146107c7578063f0e15565146107e6578063f24ed587146107f9578063f2fde38b1461080c578063f5b2cad71461082b578063fc0c546a1461084a575f80fd5b8063d1e7606314610722578063d3f7836e14610741578063d463fa8314610755578063dbc04df214610774578063de09c07f1461079f578063e08d4114146107b3575f80fd5b8063a82524b21161010f578063a82524b214610692578063aafb088e146106a7578063aed396c6146106bc578063b243b789146106db578063bceb6ffd146106fa578063ce7842f51461070d575f80fd5b80638b190376146105e55780638da5cb5b146106045780639106d7ba1461062057806395e5922c146106355780639a037aa0146106545780639f49cefb14610673575f80fd5b80633b7acec6116101f7578063633423be116101b1578063633423be1461050b578063715018a61461052a578063724e78da1461053e578063741bef1a1461055d578063773110491461057c578063845ddcb214610590575f80fd5b80633b7acec6146104485780634571a7f1146104675780634bae6f3f1461047c5780634f6404cc146104a757806353135ca0146104bc5780635e1e1004146104ec575f80fd5b806324600fc31161024857806324600fc3146103a1578063296cab55146103b55780632d296bf1146103d457806333b5b62e146103e757806333bb532c1461040a5780633785159814610429575f80fd5b80630535020d1461028f57806306b091f9146102ec57806307080d0b1461030d5780630fe3a7921461032c578063144fa6d7146103635780631c652ec814610382575b5f80fd5b34801561029a575f80fd5b506102ca6102a9366004612722565b60086020525f9081526040902080546001909101546001600160a01b031682565b604080519283526001600160a01b039091166020830152015b60405180910390f35b3480156102f7575f80fd5b5061030b61030636600461274d565b610869565b005b348015610318575f80fd5b5061030b610327366004612722565b6109c4565b348015610337575f80fd5b5060075461034b906001600160a01b031681565b6040516001600160a01b0390911681526020016102e3565b34801561036e575f80fd5b5061030b61037d366004612777565b6109d1565b34801561038d575f80fd5b5061030b61039c366004612792565b610a54565b3480156103ac575f80fd5b5061030b610ae2565b3480156103c0575f80fd5b5061030b6103cf366004612722565b610b75565b61030b6103e2366004612722565b610b82565b3480156103f2575f80fd5b506103fc600a5481565b6040519081526020016102e3565b348015610415575f80fd5b5061030b6104243660046127bb565b610f78565b348015610434575f80fd5b5061030b610443366004612722565b610fc0565b348015610453575f80fd5b5060045461034b906001600160a01b031681565b348015610472575f80fd5b506103fc60115481565b348015610487575f80fd5b506103fc610496366004612777565b60136020525f908152604090205481565b3480156104b2575f80fd5b506103fc600c5481565b3480156104c7575f80fd5b506009546104dc90600160a01b900460ff1681565b60405190151581526020016102e3565b3480156104f7575f80fd5b5061030b610506366004612777565b610fcd565b348015610516575f80fd5b5060095461034b906001600160a01b031681565b348015610535575f80fd5b5061030b610ff7565b348015610549575f80fd5b5061030b610558366004612777565b61100a565b348015610568575f80fd5b5060035461034b906001600160a01b031681565b348015610587575f80fd5b5061030b611083565b34801561059b575f80fd5b506105ca6105aa366004612722565b60106020525f908152604090208054600182015460029092015490919083565b604080519384526020840192909252908201526060016102e3565b3480156105f0575f80fd5b5061030b6105ff366004612722565b6110ac565b34801561060f575f80fd5b505f546001600160a01b031661034b565b34801561062b575f80fd5b506103fc600b5481565b348015610640575f80fd5b5060065461034b906001600160a01b031681565b34801561065f575f80fd5b5061030b61066e366004612722565b6110b9565b34801561067e575f80fd5b5061030b61068d3660046127bb565b6110c6565b34801561069d575f80fd5b506103fc600e5481565b3480156106b2575f80fd5b506103fc600f5481565b3480156106c7575f80fd5b5061030b6106d63660046127bb565b61119c565b3480156106e6575f80fd5b5060055461034b906001600160a01b031681565b61030b6107083660046127db565b611205565b348015610718575f80fd5b506103fc600d5481565b34801561072d575f80fd5b5061030b61073c366004612722565b6117fe565b34801561074c575f80fd5b506103fc611819565b348015610760575f80fd5b5061030b61076f3660046127db565b61189a565b34801561077f575f80fd5b506103fc61078e366004612777565b60146020525f908152604090205481565b3480156107aa575f80fd5b506103fc61193e565b3480156107be575f80fd5b506103fc6119e9565b3480156107d2575f80fd5b5061030b6107e1366004612722565b611a7b565b61030b6107f43660046127bb565b611a88565b61030b610807366004612809565b611f7f565b348015610817575f80fd5b5061030b610826366004612777565b61266d565b348015610836575f80fd5b5060025461034b906001600160a01b031681565b348015610855575f80fd5b5060015461034b906001600160a01b031681565b6108716126a7565b6001546040516370a0823160e01b81523060048201525f916001600160a01b0316906370a0823190602401602060405180830381865afa1580156108b7573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906108db919061283f565b90508181101561092b5760405162461bcd60e51b81526020600482015260166024820152754578636565647320746f6b656e2062616c616e63652160501b60448201526064015b60405180910390fd5b60015460405163a9059cbb60e01b81526001600160a01b038581166004830152602482018590525f92169063a9059cbb906044016020604051808303815f875af115801561097b573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061099f9190612856565b9050806109be5760405162461bcd60e51b815260040161092290612875565b50505050565b6109cc6126a7565b600c55565b6109d96126a7565b6001600160a01b038116610a285760405162461bcd60e51b8152602060048201526016602482015275546f6b656e206973207a65726f20616464726573732160501b6044820152606401610922565b600180546001600160a01b039092166001600160a01b0319928316811790915560028054909216179055565b610a5c6126a7565b5f838152601060205260409020548314610a885760405162461bcd60e51b8152600401610922906128ac565b6064821115610aa95760405162461bcd60e51b8152600401610922906128d7565b6040805160608101825284815260208082019485528183019384525f958652601090529320925183559051600183015551600290910155565b610aea6126a7565b6040515f90339047908381818185875af1925050503d805f8114610b29576040519150601f19603f3d011682016040523d82523d5f602084013e610b2e565b606091505b5050905080610b725760405162461bcd60e51b815260206004820152601060248201526f4661696c65642077697468647261772160801b6044820152606401610922565b50565b610b7d6126a7565b600e55565b600954600160a01b900460ff16610bab5760405162461bcd60e51b815260040161092290612918565b600a54811015610bcd5760405162461bcd60e51b815260040161092290612948565b5f610bd66119e9565b90505f8111610bf75760405162461bcd60e51b81526004016109229061297f565b601154811115610c195760405162461bcd60e51b81526004016109229061297f565b6002546040805163313ce56760e01b815290515f926001600160a01b03169163313ce5679160048083019260209291908290030181865afa158015610c60573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610c8491906129ad565b610c8f90600a612ac6565b610c999084612ad4565b5f838152601060205260408120600101549192506064610cb98387612ad4565b610cc39190612aeb565b905060025f9054906101000a90046001600160a01b03166001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa158015610d15573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610d3991906129ad565b610d4490600a612ac6565b610d4e9082612ad4565b9050610d5a8184612b0a565b5f85815260106020526040812060020154919450610d788288612ad4565b90505f610d8361193e565b90505f670de0b6b3a7640000610d998385612ad4565b610da39190612aeb565b905080341015610deb5760405162461bcd60e51b81526020600482015260136024820152724e6f7420656e6f756768207061796d656e742160681b6044820152606401610922565b6009546040515f916001600160a01b03169034908381818185875af1925050503d805f8114610e35576040519150601f19603f3d011682016040523d82523d5f602084013e610e3a565b606091505b5050905080610e8b5760405162461bcd60e51b815260206004820152601b60248201527f4661696c656420746f207472616e73666572207061796d656e742100000000006044820152606401610922565b60015460405163a9059cbb60e01b8152336004820152602481018a90526001600160a01b039091169063a9059cbb906044016020604051808303815f875af1158015610ed9573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610efd9190612856565b610f195760405162461bcd60e51b815260040161092290612875565b335f90815260136020526040812080548a9290610f37908490612b0a565b9250508190555087600b5f828254610f4f9190612b0a565b9250508190555083600c5f828254610f679190612b0a565b909155505050505050505050505050565b610f806126a7565b5f828152601060205260409020548214610fac5760405162461bcd60e51b8152600401610922906128ac565b5f9182526010602052604090912060020155565b610fc86126a7565b600b55565b610fd56126a7565b600980546001600160a01b0319166001600160a01b0392909216919091179055565b610fff6126a7565b6110085f6126d3565b565b6110126126a7565b6001600160a01b0381166110615760405162461bcd60e51b8152602060048201526016602482015275546f6b656e206973207a65726f20616464726573732160501b6044820152606401610922565b600380546001600160a01b0319166001600160a01b0392909216919091179055565b61108b6126a7565b6009805460ff60a01b198116600160a01b9182900460ff1615909102179055565b6110b46126a7565b601155565b6110c16126a7565b600d55565b6110ce6126a7565b5f60125460016110de9190612b0a565b905060115481111561112b5760405162461bcd60e51b81526020600482015260166024820152754d6178696d756d20737461676520657863636564732160501b6044820152606401610922565b606483111561114c5760405162461bcd60e51b8152600401610922906128d7565b600160125f82825461115e9190612b0a565b90915550506040805160608101825282815260208082019586528183019485525f938452601090529120905181559151600183015551600290910155565b6111a46126a7565b5f8281526010602052604090205482146111d05760405162461bcd60e51b8152600401610922906128ac565b60648111156111f15760405162461bcd60e51b8152600401610922906128d7565b5f9182526010602052604090912060010155565b600954600160a01b900460ff1661122e5760405162461bcd60e51b815260040161092290612918565b600a548210156112505760405162461bcd60e51b815260040161092290612948565b6001600160a01b0381166112a25760405162461bcd60e51b81526020600482015260196024820152785265666572726572206973207a65726f20616464726573732160381b6044820152606401610922565b336001600160a01b038216036112f65760405162461bcd60e51b8152602060048201526019602482015278596f752063616e277420726566657220796f757273656c662160381b6044820152606401610922565b5f6112ff6119e9565b90505f81116113205760405162461bcd60e51b81526004016109229061297f565b6011548111156113425760405162461bcd60e51b81526004016109229061297f565b6002546040805163313ce56760e01b815290515f926001600160a01b03169163313ce5679160048083019260209291908290030181865afa158015611389573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906113ad91906129ad565b6113b890600a612ac6565b6113c29085612ad4565b5f8381526010602052604081206001015491925060646113e28388612ad4565b6113ec9190612aeb565b905060025f9054906101000a90046001600160a01b03166001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa15801561143e573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061146291906129ad565b61146d90600a612ac6565b6114779082612ad4565b90506114838184612b0a565b92505f6064600d54886114969190612ad4565b6114a09190612aeb565b905060025f9054906101000a90046001600160a01b03166001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa1580156114f2573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061151691906129ad565b61152190600a612ac6565b61152b9082612ad4565b5f86815260106020526040812060020154919250611549828a612ad4565b90505f61155461193e565b90505f670de0b6b3a764000061156a8385612ad4565b6115749190612aeb565b9050803410156115bc5760405162461bcd60e51b81526020600482015260136024820152724e6f7420656e6f756768207061796d656e742160681b6044820152606401610922565b6009546040515f916001600160a01b03169034908381818185875af1925050503d805f8114611606576040519150601f19603f3d011682016040523d82523d5f602084013e61160b565b606091505b505090508061165c5760405162461bcd60e51b815260206004820152601b60248201527f4661696c656420746f207472616e73666572207061796d656e742100000000006044820152606401610922565b60015460405163a9059cbb60e01b8152336004820152602481018b90526001600160a01b039091169063a9059cbb906044016020604051808303815f875af11580156116aa573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906116ce9190612856565b6116ea5760405162461bcd60e51b815260040161092290612875565b60015460405163a9059cbb60e01b81526001600160a01b038d81166004830152602482018990529091169063a9059cbb906044016020604051808303815f875af115801561173a573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061175e9190612856565b61177a5760405162461bcd60e51b815260040161092290612b1d565b335f90815260136020526040812080548b9290611798908490612b0a565b9091555050335f90815260146020526040812080548892906117bb908490612b0a565b9250508190555088600b5f8282546117d39190612b0a565b9250508190555083600c5f8282546117eb9190612b0a565b9091555050505050505050505050505050565b6118066126a7565b6118138162015180612ad4565b600f5550565b5f8060035f9054906101000a90046001600160a01b03166001600160a01b031663feaf968c6040518163ffffffff1660e01b815260040160a060405180830381865afa15801561186b573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061188f9190612b7d565b509195945050505050565b6118a26126a7565b5f82116118f15760405162461bcd60e51b815260206004820152601860248201527f49642067726561746572207468616e207a65726f2830292100000000000000006044820152606401610922565b6040805180820182528381526001600160a01b0392831660208083019182525f95865260089052919093209251835551600190920180546001600160a01b03191692909116919091179055565b5f80611948611819565b90505f60035f9054906101000a90046001600160a01b03166001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa15801561199b573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906119bf91906129ad565b9050816119cd826012612bcb565b6119d890600a612ac6565b6119e29190612aeb565b9250505090565b5f80600e5411611a3b5760405162461bcd60e51b815260206004820152601b60248201527f50726573616c652073746172742074696d65206e6f74207365742e00000000006044820152606401610922565b600e54421015611a4a57505f90565b5f600f54600e5442611a5c9190612be4565b611a669190612aeb565b90505f611a74826001612b0a565b9392505050565b611a836126a7565b600a55565b600954600160a01b900460ff16611ab15760405162461bcd60e51b815260040161092290612918565b600a54811015611ad35760405162461bcd60e51b815260040161092290612948565b5f611adc6119e9565b90505f8111611afd5760405162461bcd60e51b81526004016109229061297f565b601154811115611b1f5760405162461bcd60e51b81526004016109229061297f565b6002546040805163313ce56760e01b815290515f926001600160a01b03169163313ce5679160048083019260209291908290030181865afa158015611b66573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611b8a91906129ad565b611b9590600a612ac6565b611b9f9084612ad4565b5f838152601060205260408120600101549192506064611bbf8387612ad4565b611bc99190612aeb565b905060025f9054906101000a90046001600160a01b03166001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa158015611c1b573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611c3f91906129ad565b611c4a90600a612ac6565b611c549082612ad4565b9050611c608184612b0a565b5f85815260106020526040812060020154919450611c7e8288612ad4565b5f89815260086020908152604080832060010154815163313ce56760e01b815291519495506001600160a01b031693849263313ce56792600480820193918290030181865afa158015611cd3573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611cf791906129ad565b60ff169050611d07816012612be4565b611d1290600a612bf7565b611d1c9084612aeb565b604051636eb1769f60e11b815233600482015230602482015290935083906001600160a01b0384169063dd62ed3e90604401602060405180830381865afa158015611d69573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611d8d919061283f565b1015611dd35760405162461bcd60e51b81526020600482015260156024820152744e6f7420656e6f75676820616c6c6f77616e63652160581b6044820152606401610922565b6009546040516323b872dd60e01b81523360048201526001600160a01b03918216602482015260448101859052908316906323b872dd906064016020604051808303815f875af1158015611e29573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611e4d9190612856565b611ea35760405162461bcd60e51b815260206004820152602160248201527f4661696c656420746f207472616e73666572207061796d656e7420746f6b656e6044820152602160f81b6064820152608401610922565b60015460405163a9059cbb60e01b8152336004820152602481018990526001600160a01b039091169063a9059cbb906044016020604051808303815f875af1158015611ef1573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611f159190612856565b611f315760405162461bcd60e51b815260040161092290612875565b335f9081526013602052604081208054899290611f4f908490612b0a565b9250508190555086600b5f828254611f679190612b0a565b9250508190555082600c5f828254610f679190612b0a565b600954600160a01b900460ff16611fa85760405162461bcd60e51b815260040161092290612918565b600a54821015611fca5760405162461bcd60e51b815260040161092290612948565b6001600160a01b03811661201c5760405162461bcd60e51b81526020600482015260196024820152785265666572726572206973207a65726f20616464726573732160381b6044820152606401610922565b336001600160a01b038216036120705760405162461bcd60e51b8152602060048201526019602482015278596f752063616e277420726566657220796f757273656c662160381b6044820152606401610922565b5f6120796119e9565b90505f811161209a5760405162461bcd60e51b81526004016109229061297f565b6011548111156120bc5760405162461bcd60e51b81526004016109229061297f565b6002546040805163313ce56760e01b815290515f926001600160a01b03169163313ce5679160048083019260209291908290030181865afa158015612103573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061212791906129ad565b61213290600a612ac6565b61213c9085612ad4565b5f83815260106020526040812060010154919250606461215c8388612ad4565b6121669190612aeb565b905060025f9054906101000a90046001600160a01b03166001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa1580156121b8573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906121dc91906129ad565b6121e790600a612ac6565b6121f19082612ad4565b90506121fd8184612b0a565b92505f6064600d54886122109190612ad4565b61221a9190612aeb565b905060025f9054906101000a90046001600160a01b03166001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa15801561226c573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061229091906129ad565b61229b90600a612ac6565b6122a59082612ad4565b5f868152601060205260408120600201549192506122c3828a612ad4565b5f8b815260086020908152604080832060010154815163313ce56760e01b815291519495506001600160a01b031693849263313ce56792600480820193918290030181865afa158015612318573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061233c91906129ad565b60ff16905061234c816012612be4565b61235790600a612bf7565b6123619084612aeb565b604051636eb1769f60e11b815233600482015230602482015290935083906001600160a01b0384169063dd62ed3e90604401602060405180830381865afa1580156123ae573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906123d2919061283f565b10156124185760405162461bcd60e51b81526020600482015260156024820152744e6f7420656e6f75676820616c6c6f77616e63652160581b6044820152606401610922565b6009546040516323b872dd60e01b81523360048201526001600160a01b03918216602482015260448101859052908316906323b872dd906064016020604051808303815f875af115801561246e573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906124929190612856565b6124de5760405162461bcd60e51b815260206004820152601d60248201527f4661696c656420746f207472616e736665722070617920746f6b656e210000006044820152606401610922565b60015460405163a9059cbb60e01b8152336004820152602481018a90526001600160a01b039091169063a9059cbb906044016020604051808303815f875af115801561252c573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906125509190612856565b61256c5760405162461bcd60e51b815260040161092290612875565b60015460405163a9059cbb60e01b81526001600160a01b038c81166004830152602482018890529091169063a9059cbb906044016020604051808303815f875af11580156125bc573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906125e09190612856565b6125fc5760405162461bcd60e51b815260040161092290612b1d565b335f90815260136020526040812080548a929061261a908490612b0a565b9091555050335f908152601460205260408120805487929061263d908490612b0a565b9250508190555087600b5f8282546126559190612b0a565b9250508190555082600c5f8282546117eb9190612b0a565b6126756126a7565b6001600160a01b03811661269e57604051631e4fbdf760e01b81525f6004820152602401610922565b610b72816126d3565b5f546001600160a01b031633146110085760405163118cdaa760e01b8152336004820152602401610922565b5f80546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b5f60208284031215612732575f80fd5b5035919050565b6001600160a01b0381168114610b72575f80fd5b5f806040838503121561275e575f80fd5b823561276981612739565b946020939093013593505050565b5f60208284031215612787575f80fd5b8135611a7481612739565b5f805f606084860312156127a4575f80fd5b505081359360208301359350604090920135919050565b5f80604083850312156127cc575f80fd5b50508035926020909101359150565b5f80604083850312156127ec575f80fd5b8235915060208301356127fe81612739565b809150509250929050565b5f805f6060848603121561281b575f80fd5b8335925060208401359150604084013561283481612739565b809150509250925092565b5f6020828403121561284f575f80fd5b5051919050565b5f60208284031215612866575f80fd5b81518015158114611a74575f80fd5b60208082526019908201527f4661696c656420746f207472616e7366657220746f6b656e2100000000000000604082015260600190565b602080825260119082015270494420646f65736e27742065786973742160781b604082015260600190565b60208082526021908201527f426f6e75732073686f756c64206265206265747765656e203020616e642031306040820152600360fc1b606082015260800190565b60208082526016908201527550726573616c65206973206e6f74206163746976652160501b604082015260600190565b6020808252601b908201527f506c6561736520456e746572206d696e696d756d20746f6b656e210000000000604082015260600190565b6020808252601490820152735374616765206e6f7420617661696c61626c652160601b604082015260600190565b5f602082840312156129bd575f80fd5b815160ff81168114611a74575f80fd5b634e487b7160e01b5f52601160045260245ffd5b6001815b6001841115612a1c57808504811115612a0057612a006129cd565b6001841615612a0e57908102905b60019390931c9280026129e5565b935093915050565b5f82612a3257506001612ac0565b81612a3e57505f612ac0565b8160018114612a545760028114612a5e57612a7a565b6001915050612ac0565b60ff841115612a6f57612a6f6129cd565b50506001821b612ac0565b5060208310610133831016604e8410600b8410161715612a9d575081810a612ac0565b612aa95f1984846129e1565b805f1904821115612abc57612abc6129cd565b0290505b92915050565b5f611a7460ff841683612a24565b8082028115828204841417612ac057612ac06129cd565b5f82612b0557634e487b7160e01b5f52601260045260245ffd5b500490565b80820180821115612ac057612ac06129cd565b60208082526022908201527f4661696c656420746f207472616e7366657220726566657272616c20746f6b656040820152616e2160f01b606082015260800190565b805169ffffffffffffffffffff81168114612b78575f80fd5b919050565b5f805f805f60a08688031215612b91575f80fd5b612b9a86612b5f565b60208701516040880151606089015192975090955093509150612bbf60808701612b5f565b90509295509295909350565b60ff8181168382160190811115612ac057612ac06129cd565b81810381811115612ac057612ac06129cd565b5f611a748383612a2456fea2646970667358221220ff03025c6de8815b9cca9ed3c9a6835ecbbf0652911a64275cfe806da448211764736f6c634300081a0033
Verified Source Code Full Match
Compiler: v0.8.26+commit.8a97fa7a
EVM: cancun
Optimization: Yes (200 runs)
AggregatorV3Interface.sol 19 lines
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;
interface AggregatorV3Interface {
function decimals() external view returns (uint8);
function description() external view returns (string memory);
function version() external view returns (uint256);
function getRoundData(
uint80 _roundId
) external view returns (uint80 roundId, int256 answer, uint256 startedAt, uint256 updatedAt, uint80 answeredInRound);
function latestRoundData()
external
view
returns (uint80 roundId, int256 answer, uint256 startedAt, uint256 updatedAt, uint80 answeredInRound);
}
Ownable.sol 100 lines
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v5.0.0) (access/Ownable.sol)
pragma solidity ^0.8.20;
import {Context} from "../utils/Context.sol";
/**
* @dev Contract module which provides a basic access control mechanism, where
* there is an account (an owner) that can be granted exclusive access to
* specific functions.
*
* The initial owner is set to the address provided by the deployer. This can
* later be changed with {transferOwnership}.
*
* This module is used through inheritance. It will make available the modifier
* `onlyOwner`, which can be applied to your functions to restrict their use to
* the owner.
*/
abstract contract Ownable is Context {
address private _owner;
/**
* @dev The caller account is not authorized to perform an operation.
*/
error OwnableUnauthorizedAccount(address account);
/**
* @dev The owner is not a valid owner account. (eg. `address(0)`)
*/
error OwnableInvalidOwner(address owner);
event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);
/**
* @dev Initializes the contract setting the address provided by the deployer as the initial owner.
*/
constructor(address initialOwner) {
if (initialOwner == address(0)) {
revert OwnableInvalidOwner(address(0));
}
_transferOwnership(initialOwner);
}
/**
* @dev Throws if called by any account other than the owner.
*/
modifier onlyOwner() {
_checkOwner();
_;
}
/**
* @dev Returns the address of the current owner.
*/
function owner() public view virtual returns (address) {
return _owner;
}
/**
* @dev Throws if the sender is not the owner.
*/
function _checkOwner() internal view virtual {
if (owner() != _msgSender()) {
revert OwnableUnauthorizedAccount(_msgSender());
}
}
/**
* @dev Leaves the contract without owner. It will not be possible to call
* `onlyOwner` functions. Can only be called by the current owner.
*
* NOTE: Renouncing ownership will leave the contract without an owner,
* thereby disabling any functionality that is only available to the owner.
*/
function renounceOwnership() public virtual onlyOwner {
_transferOwnership(address(0));
}
/**
* @dev Transfers ownership of the contract to a new account (`newOwner`).
* Can only be called by the current owner.
*/
function transferOwnership(address newOwner) public virtual onlyOwner {
if (newOwner == address(0)) {
revert OwnableInvalidOwner(address(0));
}
_transferOwnership(newOwner);
}
/**
* @dev Transfers ownership of the contract to a new account (`newOwner`).
* Internal function without access restriction.
*/
function _transferOwnership(address newOwner) internal virtual {
address oldOwner = _owner;
_owner = newOwner;
emit OwnershipTransferred(oldOwner, newOwner);
}
}
IERC20.sol 79 lines
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v5.1.0) (token/ERC20/IERC20.sol)
pragma solidity ^0.8.20;
/**
* @dev Interface of the ERC-20 standard as defined in the ERC.
*/
interface IERC20 {
/**
* @dev Emitted when `value` tokens are moved from one account (`from`) to
* another (`to`).
*
* Note that `value` may be zero.
*/
event Transfer(address indexed from, address indexed to, uint256 value);
/**
* @dev Emitted when the allowance of a `spender` for an `owner` is set by
* a call to {approve}. `value` is the new allowance.
*/
event Approval(address indexed owner, address indexed spender, uint256 value);
/**
* @dev Returns the value of tokens in existence.
*/
function totalSupply() external view returns (uint256);
/**
* @dev Returns the value of tokens owned by `account`.
*/
function balanceOf(address account) external view returns (uint256);
/**
* @dev Moves a `value` amount of tokens from the caller's account to `to`.
*
* Returns a boolean value indicating whether the operation succeeded.
*
* Emits a {Transfer} event.
*/
function transfer(address to, uint256 value) external returns (bool);
/**
* @dev Returns the remaining number of tokens that `spender` will be
* allowed to spend on behalf of `owner` through {transferFrom}. This is
* zero by default.
*
* This value changes when {approve} or {transferFrom} are called.
*/
function allowance(address owner, address spender) external view returns (uint256);
/**
* @dev Sets a `value` amount of tokens as the allowance of `spender` over the
* caller's tokens.
*
* Returns a boolean value indicating whether the operation succeeded.
*
* IMPORTANT: Beware that changing an allowance with this method brings the risk
* that someone may use both the old and the new allowance by unfortunate
* transaction ordering. One possible solution to mitigate this race
* condition is to first reduce the spender's allowance to 0 and set the
* desired value afterwards:
* https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729
*
* Emits an {Approval} event.
*/
function approve(address spender, uint256 value) external returns (bool);
/**
* @dev Moves a `value` amount of tokens from `from` to `to` using the
* allowance mechanism. `value` is then deducted from the caller's
* allowance.
*
* Returns a boolean value indicating whether the operation succeeded.
*
* Emits a {Transfer} event.
*/
function transferFrom(address from, address to, uint256 value) external returns (bool);
}
IERC20Metadata.sol 26 lines
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v5.1.0) (token/ERC20/extensions/IERC20Metadata.sol)
pragma solidity ^0.8.20;
import {IERC20} from "../IERC20.sol";
/**
* @dev Interface for the optional metadata functions from the ERC-20 standard.
*/
interface IERC20Metadata is IERC20 {
/**
* @dev Returns the name of the token.
*/
function name() external view returns (string memory);
/**
* @dev Returns the symbol of the token.
*/
function symbol() external view returns (string memory);
/**
* @dev Returns the decimals places of the token.
*/
function decimals() external view returns (uint8);
}
Context.sol 28 lines
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v5.0.1) (utils/Context.sol)
pragma solidity ^0.8.20;
/**
* @dev Provides information about the current execution context, including the
* sender of the transaction and its data. While these are generally available
* via msg.sender and msg.data, they should not be accessed in such a direct
* manner, since when dealing with meta-transactions the account sending and
* paying for execution may not be the actual sender (as far as an application
* is concerned).
*
* This contract is only required for intermediate, library-like contracts.
*/
abstract contract Context {
function _msgSender() internal view virtual returns (address) {
return msg.sender;
}
function _msgData() internal view virtual returns (bytes calldata) {
return msg.data;
}
function _contextSuffixLength() internal view virtual returns (uint256) {
return 0;
}
}
VeronumPresale.sol 410 lines
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.22;
import "@openzeppelin/contracts/access/Ownable.sol";
import "@openzeppelin/contracts/token/ERC20/IERC20.sol";
import "@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol";
import "@chainlink/contracts/src/v0.8/interfaces/AggregatorV3Interface.sol";
contract VeronumPresale is Ownable {
IERC20 public token;
IERC20Metadata public tokenMetadata;
AggregatorV3Interface public priceFeed;
IERC20 public tokenUsdt;
IERC20Metadata public tokenMetadataUsdt;
IERC20 public tokenUsdc;
IERC20Metadata public tokenMetadataUsdc;
struct PayToken {
uint256 id;
IERC20 token;
}
mapping(uint256 => PayToken) public payTokens;
address public paymentAddress;
bool public presaleActive = true;
uint256 public minPurchase = 5000;
uint256 public totalSold = 0;
uint256 public totalRaisedUsd = 0;
uint256 public referralBonus = 5;
uint256 public presaleStartTime = 1741426267;
uint256 public stageDuration = 14 days;
struct Stage {
uint256 id;
uint256 bonus;
uint256 price;
}
mapping(uint256 => Stage) public stages;
uint256 public maxStage = 8;
uint256 currentStageId = 0;
mapping(address => uint256) public purchasedTokens;
mapping(address => uint256) public referredTokens;
// constructor
constructor(
address _paymentAddress,
address _tokenAddress,
address _priceFeedAddress,
address _tokenUsdt,
address _tokenUsdc
) Ownable(msg.sender) {
token = IERC20(_tokenAddress);
tokenMetadata = IERC20Metadata(_tokenAddress);
paymentAddress = _paymentAddress;
priceFeed = AggregatorV3Interface(_priceFeedAddress);
// paytokens
payTokens[1] = PayToken(1, IERC20(_tokenUsdt)); //usdt
payTokens[2] = PayToken(2, IERC20(_tokenUsdc)); //usdc
// stage data
stages[1] = Stage(1, 35, 20000000000000000); //stage 1
stages[2] = Stage(2, 30, 25000000000000000); //stage 2
stages[3] = Stage(3, 25, 30000000000000000); //stage 3
stages[4] = Stage(4, 20, 35000000000000000); //stage 4
stages[5] = Stage(5, 15, 40000000000000000); //stage 5
stages[6] = Stage(6, 10, 45000000000000000); //stage 6
stages[7] = Stage(7, 5, 52000000000000000); //stage 7
stages[8] = Stage(8, 0, 62000000000000000); //stage 8
currentStageId = 8;
}
// Get the latest ETH/USD price from the Aggregator
function getEthToUsdPrice() public view returns (uint256) {
(, int256 price, , , ) = priceFeed.latestRoundData();
return uint256(price);
}
// calculate USD to ETH price
function getUsdToEthPrice() public view returns (uint256) {
uint256 ethToUsdPrice = getEthToUsdPrice();
uint8 decimals = priceFeed.decimals();
return (10**(18 + decimals)) / ethToUsdPrice;
}
// buyToken funtion to buy tokens
function buyToken(uint256 _amount) public payable {
require(presaleActive, "Presale is not active!");
require(_amount >= 0, "Please Enter token amount!");
require(_amount >= minPurchase, "Please Enter minimum token!");
uint256 _id = getCurrentStageIdActive();
require(_id > 0, "Stage not available!");
require(_id <= maxStage, "Stage not available!");
uint256 _totalTokenAmount = _amount * 10**tokenMetadata.decimals();
uint256 _bonus = stages[_id].bonus;
uint256 _bonusAmount = (_amount * _bonus) / 100;
_bonusAmount *= 10**tokenMetadata.decimals();
_totalTokenAmount += _bonusAmount;
//calculate price
uint256 _price = stages[_id].price;
uint256 _totalPayUsd = _amount * _price;
uint256 _usdToEth = getUsdToEthPrice();
uint256 _totalPayAmount = (_totalPayUsd * _usdToEth) / 1e18;
require(msg.value >= _totalPayAmount, "Not enough payment!");
//payment price transfer to payement address
(bool paySent, ) = paymentAddress.call{value: msg.value}("");
require(paySent, "Failed to transfer payment!");
//purchased tokens transfer to buyer address
require(
token.transfer(msg.sender, _totalTokenAmount),
"Failed to transfer token!"
);
//update data
purchasedTokens[msg.sender] += _totalTokenAmount;
totalSold += _totalTokenAmount;
totalRaisedUsd += _totalPayUsd;
}
// buyWithPayToken funtion to buy tokens
function buyWithPayToken(uint256 _payTokensId, uint256 _amount)
public
payable
{
require(presaleActive, "Presale is not active!");
require(_amount >= 0, "Please Enter token amount!");
require(_amount >= minPurchase, "Please Enter minimum token!");
uint256 _id = getCurrentStageIdActive();
require(_id > 0, "Stage not available!");
require(_id <= maxStage, "Stage not available!");
uint256 _totalTokenAmount = _amount * 10**tokenMetadata.decimals();
uint256 _bonus = stages[_id].bonus;
uint256 _bonusAmount = (_amount * _bonus) / 100;
_bonusAmount *= 10**tokenMetadata.decimals();
_totalTokenAmount += _bonusAmount;
//calculate price & payment token transfer
uint256 _price = stages[_id].price;
uint256 _totalPayUsd = _amount * _price;
IERC20 _payTokenAddress = payTokens[_payTokensId].token;
uint256 _payTokenDecimals = IERC20Metadata(address(_payTokenAddress))
.decimals();
_totalPayUsd /= (10**(18 - _payTokenDecimals));
require(
_payTokenAddress.allowance(msg.sender, address(this)) >=
_totalPayUsd,
"Not enough allowance!"
);
require(
_payTokenAddress.transferFrom(
msg.sender,
paymentAddress,
_totalPayUsd
),
"Failed to transfer payment token!"
);
//purchased tokens transfer to buyer address
require(
token.transfer(msg.sender, _totalTokenAmount),
"Failed to transfer token!"
);
//update data
purchasedTokens[msg.sender] += _totalTokenAmount;
totalSold += _totalTokenAmount;
totalRaisedUsd += _totalPayUsd;
}
// buyTokenWithReferral funtion to buy tokens
function buyTokenWithReferral(uint256 _amount, address _referralAddress)
public
payable
{
require(presaleActive, "Presale is not active!");
require(_amount >= 0, "Please Enter token amount!");
require(_amount >= minPurchase, "Please Enter minimum token!");
require(_referralAddress != address(0), "Referrer is zero address!");
require(_referralAddress != msg.sender, "You can't refer yourself!");
uint256 _id = getCurrentStageIdActive();
require(_id > 0, "Stage not available!");
require(_id <= maxStage, "Stage not available!");
uint256 _totalTokenAmount = _amount * 10**tokenMetadata.decimals();
uint256 _bonus = stages[_id].bonus;
uint256 _bonusAmount = (_amount * _bonus) / 100;
_bonusAmount *= 10**tokenMetadata.decimals();
_totalTokenAmount += _bonusAmount;
//calculate referral
uint256 _referralTokenAmount = (_amount * referralBonus) / 100;
_referralTokenAmount *= 10**tokenMetadata.decimals();
//calculate price
uint256 _price = stages[_id].price;
uint256 _totalPayUsd = _amount * _price;
uint256 _usdToEth = getUsdToEthPrice();
uint256 _totalPayAmount = (_totalPayUsd * _usdToEth) / 1e18;
require(msg.value >= _totalPayAmount, "Not enough payment!");
//payment price transfer to payement address
(bool paySent, ) = paymentAddress.call{value: msg.value}("");
require(paySent, "Failed to transfer payment!");
//purchased tokens transfer to buyer address, referral address
require(
token.transfer(msg.sender, _totalTokenAmount),
"Failed to transfer token!"
);
require(
token.transfer(_referralAddress, _referralTokenAmount),
"Failed to transfer referral token!"
);
//update data
purchasedTokens[msg.sender] += _totalTokenAmount;
referredTokens[msg.sender] += _referralTokenAmount;
totalSold += _totalTokenAmount;
totalRaisedUsd += _totalPayUsd;
}
// buyWithReferralWithPayToken funtion to buy tokens
function buyWithReferralWithPayToken(
uint256 _payTokensId,
uint256 _amount,
address _referralAddress
) public payable {
require(presaleActive, "Presale is not active!");
require(_amount >= 0, "Please Enter token amount!");
require(_amount >= minPurchase, "Please Enter minimum token!");
require(_referralAddress != address(0), "Referrer is zero address!");
require(_referralAddress != msg.sender, "You can't refer yourself!");
uint256 _id = getCurrentStageIdActive();
require(_id > 0, "Stage not available!");
require(_id <= maxStage, "Stage not available!");
uint256 _totalTokenAmount = _amount * 10**tokenMetadata.decimals();
uint256 _bonus = stages[_id].bonus;
uint256 _bonusAmount = (_amount * _bonus) / 100;
_bonusAmount *= 10**tokenMetadata.decimals();
_totalTokenAmount += _bonusAmount;
//calculate referral
uint256 _referralTokenAmount = (_amount * referralBonus) / 100;
_referralTokenAmount *= 10**tokenMetadata.decimals();
//calculate price & pay token transfer
uint256 _price = stages[_id].price;
uint256 _totalPayUsd = _amount * _price;
IERC20 _payTokenAddress = payTokens[_payTokensId].token;
uint256 _payTokenDecimals = IERC20Metadata(address(_payTokenAddress))
.decimals();
_totalPayUsd /= (10**(18 - _payTokenDecimals));
require(
_payTokenAddress.allowance(msg.sender, address(this)) >=
_totalPayUsd,
"Not enough allowance!"
);
require(
_payTokenAddress.transferFrom(
msg.sender,
paymentAddress,
_totalPayUsd
),
"Failed to transfer pay token!"
);
//purchased tokens transfer to buyer address, referral address
require(
token.transfer(msg.sender, _totalTokenAmount),
"Failed to transfer token!"
);
require(
token.transfer(_referralAddress, _referralTokenAmount),
"Failed to transfer referral token!"
);
//update data
purchasedTokens[msg.sender] += _totalTokenAmount;
referredTokens[msg.sender] += _referralTokenAmount;
totalSold += _totalTokenAmount;
totalRaisedUsd += _totalPayUsd;
}
// update token address
function setToken(address _tokenAddress) public onlyOwner {
require(_tokenAddress != address(0), "Token is zero address!");
token = IERC20(_tokenAddress);
tokenMetadata = IERC20Metadata(_tokenAddress);
}
// update price feed address
function setPriceFeed(address _priceFeed) public onlyOwner {
require(_priceFeed != address(0), "Token is zero address!");
priceFeed = AggregatorV3Interface(_priceFeed);
}
// update paementAddress
function setPaymentAddress(address _paymentAddress) public onlyOwner {
paymentAddress = _paymentAddress;
}
// flip presaleActive as true/false
function flipPresaleActive() public onlyOwner {
presaleActive = !presaleActive;
}
// update referralBonus
function setReferralBonus(uint256 _referralBonus) public onlyOwner {
referralBonus = _referralBonus;
}
// update maximum stage
function setMaxStage(uint256 _maxStage) public onlyOwner {
maxStage = _maxStage;
}
// update minPurchase
function setMinPurchase(uint256 _minPurchase) public onlyOwner {
minPurchase = _minPurchase;
}
// update totalSold
function setTotalSold(uint256 _totalSold) public onlyOwner {
totalSold = _totalSold;
}
// update totalRaisedUsd
function setTotalRaisedUsd(uint256 _totalRaisedUsd) public onlyOwner {
totalRaisedUsd = _totalRaisedUsd;
}
// update presaleStartTime
function setPresaleStartTime(uint256 _presaleStartTime) external onlyOwner {
presaleStartTime = _presaleStartTime;
}
// update stageDuration
function setStageDuration(uint256 _stageDuration) external onlyOwner {
stageDuration = _stageDuration * 1 days;
}
//update pay token
function setPayTokens(uint256 _id, IERC20 _tokenAddress) public onlyOwner {
require(_id > 0, "Id greater than zero(0)!");
payTokens[_id] = PayToken(_id, IERC20(_tokenAddress));
}
// adding stage info
function addStage(uint256 _bonus, uint256 _price) public onlyOwner {
uint256 _id = currentStageId + 1;
require(_id <= maxStage, "Maximum stage excceds!");
require(_bonus <= 100, "Bonus should be between 0 and 100");
currentStageId += 1;
stages[_id] = Stage(_id, _bonus, _price);
}
// update stage info
function setStage(
uint256 _id,
uint256 _bonus,
uint256 _price
) public onlyOwner {
require(stages[_id].id == _id, "ID doesn't exist!");
require(_bonus <= 100, "Bonus should be between 0 and 100");
stages[_id] = Stage(_id, _bonus, _price);
}
// update stage bonus
function setStageBonus(uint256 _id, uint256 _bonus) public onlyOwner {
require(stages[_id].id == _id, "ID doesn't exist!");
require(_bonus <= 100, "Bonus should be between 0 and 100");
stages[_id].bonus = _bonus;
}
// update stage price
function setStagePrice(uint256 _id, uint256 _price) public onlyOwner {
require(stages[_id].id == _id, "ID doesn't exist!");
stages[_id].price = _price;
}
// get current stage id active
function getCurrentStageIdActive() public view returns (uint256) {
require(presaleStartTime > 0, "Presale start time not set.");
if (block.timestamp < presaleStartTime) {
return 0;
} else {
// Calculate how many stage duration periods have passed
uint256 daysSinceStart = (block.timestamp - presaleStartTime) /
stageDuration;
// stage 1 starts from day 0
uint256 _currentStageId = daysSinceStart + 1;
return _currentStageId;
}
}
// withdrawFunds functions to get remaining funds transfer
function withdrawFunds() public onlyOwner {
(bool withdrawSent, ) = payable(msg.sender).call{
value: address(this).balance
}("");
require(withdrawSent, "Failed withdraw!");
}
// withdrawTokens functions to get remaining tokens transfer
function withdrawTokens(address _to, uint256 _amount) public onlyOwner {
uint256 _tokenBalance = token.balanceOf(address(this));
require(_tokenBalance >= _amount, "Exceeds token balance!");
bool success = token.transfer(_to, _amount);
require(success, "Failed to transfer token!");
}
}
Read Contract
getCurrentStageIdActive 0xe08d4114 → uint256
getEthToUsdPrice 0xd3f7836e → uint256
getUsdToEthPrice 0xde09c07f → uint256
maxStage 0x4571a7f1 → uint256
minPurchase 0x33b5b62e → uint256
owner 0x8da5cb5b → address
payTokens 0x0535020d → uint256, address
paymentAddress 0x633423be → address
presaleActive 0x53135ca0 → bool
presaleStartTime 0xa82524b2 → uint256
priceFeed 0x741bef1a → address
purchasedTokens 0x4bae6f3f → uint256
referralBonus 0xce7842f5 → uint256
referredTokens 0xdbc04df2 → uint256
stageDuration 0xaafb088e → uint256
stages 0x845ddcb2 → uint256, uint256, uint256
token 0xfc0c546a → address
tokenMetadata 0xf5b2cad7 → address
tokenMetadataUsdc 0x0fe3a792 → address
tokenMetadataUsdt 0xb243b789 → address
tokenUsdc 0x95e5922c → address
tokenUsdt 0x3b7acec6 → address
totalRaisedUsd 0x4f6404cc → uint256
totalSold 0x9106d7ba → uint256
Write Contract 24 functions
These functions modify contract state and require a wallet transaction to execute.
addStage 0x9f49cefb
uint256 _bonus
uint256 _price
buyToken 0x2d296bf1
uint256 _amount
buyTokenWithReferral 0xbceb6ffd
uint256 _amount
address _referralAddress
buyWithPayToken 0xf0e15565
uint256 _payTokensId
uint256 _amount
buyWithReferralWithPayToken 0xf24ed587
uint256 _payTokensId
uint256 _amount
address _referralAddress
flipPresaleActive 0x77311049
No parameters
renounceOwnership 0x715018a6
No parameters
setMaxStage 0x8b190376
uint256 _maxStage
setMinPurchase 0xe8307d00
uint256 _minPurchase
setPayTokens 0xd463fa83
uint256 _id
address _tokenAddress
setPaymentAddress 0x5e1e1004
address _paymentAddress
setPresaleStartTime 0x296cab55
uint256 _presaleStartTime
setPriceFeed 0x724e78da
address _priceFeed
setReferralBonus 0x9a037aa0
uint256 _referralBonus
setStage 0x1c652ec8
uint256 _id
uint256 _bonus
uint256 _price
setStageBonus 0xaed396c6
uint256 _id
uint256 _bonus
setStageDuration 0xd1e76063
uint256 _stageDuration
setStagePrice 0x33bb532c
uint256 _id
uint256 _price
setToken 0x144fa6d7
address _tokenAddress
setTotalRaisedUsd 0x07080d0b
uint256 _totalRaisedUsd
setTotalSold 0x37851598
uint256 _totalSold
transferOwnership 0xf2fde38b
address newOwner
withdrawFunds 0x24600fc3
No parameters
withdrawTokens 0x06b091f9
address _to
uint256 _amount
Recent Transactions
No transactions found for this address