Address Contract Verified
Address
0x13b4e3deb676E3ceca7b78C4c87d8DB071673712
Balance
0 ETH
Nonce
1
Code Size
13094 bytes
Creator
0x6e69369e...c821 at tx 0x3c224a2e...3de8fc
Indexed Transactions
0
Contract Bytecode
13094 bytes
0x608060405260043610610184575f3560e01c80637d8966e4116100d0578063a98ad46c11610089578063cc3d967b11610063578063cc3d967b14610567578063d4e02786146105a3578063e049efa1146105df578063f2fde38b146106095761018b565b8063a98ad46c146104d4578063ac55ae1f146104fe578063b712a2ab1461053b5761018b565b80637d8966e4146103ee57806384276d81146104045780638917db451461042c5780638a5a0060146104565780638da5cb5b146104805780639833b0ff146104aa5761018b565b806322f3e2d41161013d5780635b85e1f2116101175780635b85e1f2146103485780637097cdc414610384578063715018a6146103ae578063787beb34146103c45761018b565b806322f3e2d4146102c657806331ad36ab146102f05780634e0e4879146103205761018b565b8063074bc1011461018f578063084faa43146101b957806308f2d320146101e357806308f433331461021f5780630ec1ecac146102605780631797f3101461028a5761018b565b3661018b57005b5f80fd5b34801561019a575f80fd5b506101a3610631565b6040516101b09190612277565b60405180910390f35b3480156101c4575f80fd5b506101cd610656565b6040516101da91906122a8565b60405180910390f35b3480156101ee575f80fd5b5061020960048036038101906102049190612319565b610666565b6040516102169190612371565b60405180910390f35b34801561022a575f80fd5b5061024560048036038101906102409190612319565b6106bd565b60405161025796959493929190612418565b60405180910390f35b34801561026b575f80fd5b50610274610728565b60405161028191906122a8565b60405180910390f35b348015610295575f80fd5b506102b060048036038101906102ab9190612477565b61072e565b6040516102bd91906122a8565b60405180910390f35b3480156102d1575f80fd5b506102da610743565b6040516102e79190612371565b60405180910390f35b61030a600480360381019061030591906124a2565b610755565b6040516103179190612371565b60405180910390f35b34801561032b575f80fd5b50610346600480360381019061034191906124cd565b610ae1565b005b348015610353575f80fd5b5061036e60048036038101906103699190612540565b610d48565b60405161037b9190612371565b60405180910390f35b34801561038f575f80fd5b50610398611261565b6040516103a591906122a8565b60405180910390f35b3480156103b9575f80fd5b506103c2611267565b005b3480156103cf575f80fd5b506103d861127a565b6040516103e59190612596565b60405180910390f35b3480156103f9575f80fd5b50610402611317565b005b34801561040f575f80fd5b5061042a600480360381019061042591906124a2565b611375565b005b348015610437575f80fd5b50610440611453565b60405161044d9190612277565b60405180910390f35b348015610461575f80fd5b5061046a611478565b6040516104779190612277565b60405180910390f35b34801561048b575f80fd5b50610494611490565b6040516104a19190612277565b60405180910390f35b3480156104b5575f80fd5b506104be6114b8565b6040516104cb9190612596565b60405180910390f35b3480156104df575f80fd5b506104e8611555565b6040516104f59190612277565b60405180910390f35b348015610509575f80fd5b50610524600480360381019061051f9190612540565b61157a565b6040516105329291906125af565b60405180910390f35b348015610546575f80fd5b5061054f611798565b60405161055e939291906125d6565b60405180910390f35b348015610572575f80fd5b5061058d60048036038101906105889190612477565b6117c3565b60405161059a9190612759565b60405180910390f35b3480156105ae575f80fd5b506105c960048036038101906105c491906127a3565b6118da565b6040516105d69190612371565b60405180910390f35b3480156105ea575f80fd5b506105f36119ca565b60405161060091906122a8565b60405180910390f35b348015610614575f80fd5b5061062f600480360381019061062a9190612477565b6119d0565b005b60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6b60ef6b1aba6f07233000000081565b5f61066f611a54565b5f8390506106b2730572798938a8aa670b31b4369733a890e56684fd848373ffffffffffffffffffffffffffffffffffffffff16611adb9092919063ffffffff16565b600191505092915050565b600f602052815f5260405f2081815481106106d6575f80fd5b905f5260205f2090600502015f9150915050805f015490806001015490806002015490806003015490806004015f9054906101000a900460ff16908060040160019054906101000a900460ff16905086565b60075481565b600e602052805f5260405f205f915090505481565b600a5f9054906101000a900460ff1681565b5f61075e611b5a565b600a5f9054906101000a900460ff166107ac576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107a390612861565b60405180910390fd5b336107b681611b9e565b156107f6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107ed906128c9565b60405180910390fd5b82600181101561083b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161083290612931565b60405180910390fd5b600b6001015442118015610853575042600b60020154115b610892576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610889906129bf565b60405180910390fd5b5f8061089e865f61157a565b80925081935050508060065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b81526004016109019190612277565b602060405180830381865afa15801561091c573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061094091906129f1565b1015610981576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161097890612a66565b60405180910390fd5b61098a81611baf565b813410156109cd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109c490612ace565b60405180910390fd5b6109eb868383425f600b5f015f9054906101000a900460ff16611c0e565b81341115610a0e575f8234610a009190612b19565b9050610a0c3382611db6565b505b610a2c730572798938a8aa670b31b4369733a890e56684fd83611db6565b610a78338260065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16611adb9092919063ffffffff16565b3373ffffffffffffffffffffffffffffffffffffffff167fd368961d33ebd8d78de2e70fbdb55b7de41dc853caccc2a81f3dc4e0eaecd5248784845f604051610ac49493929190612b4c565b60405180910390a26001945050505050610adc611e9f565b919050565b610ae9611a54565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603610b57576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b4e90612bd9565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610bc5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bbc90612c41565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603610c33576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c2a90612ca9565b60405180910390fd5b8260045f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508160055f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508060065f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508273ffffffffffffffffffffffffffffffffffffffff167f9a143b3500d5efe421f09f7a1aa033da309ba9c748ac43b257f1980cdc31de438383604051610d3b929190612cc7565b60405180910390a2505050565b5f610d51611b5a565b600a5f9054906101000a900460ff16610d9f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d9690612861565b60405180910390fd5b826001811015610de4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ddb90612931565b60405180910390fd5b33610dee81611b9e565b15610e2e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e25906128c9565b60405180910390fd5b600b6001015442118015610e46575042600b60020154115b610e85576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e7c906129bf565b60405180910390fd5b60016002811115610e9957610e9861238a565b5b846002811115610eac57610eab61238a565b5b1480610edb5750600280811115610ec657610ec561238a565b5b846002811115610ed957610ed861238a565b5b145b610f1a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f1190612d38565b60405180910390fd5b5f60016002811115610f2f57610f2e61238a565b5b856002811115610f4257610f4161238a565b5b14610f6e5760055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16610f91565b60045f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff165b90505f8190505f80610fa3898961157a565b80925081935050508060065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b81526004016110069190612277565b602060405180830381865afa158015611021573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061104591906129f1565b1015611086576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161107d90612a66565b60405180910390fd5b61108f81611baf565b818373ffffffffffffffffffffffffffffffffffffffff1663dd62ed3e33306040518363ffffffff1660e01b81526004016110cb929190612cc7565b602060405180830381865afa1580156110e6573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061110a91906129f1565b101561114b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161114290612da0565b60405180910390fd5b611169898383428c600b5f015f9054906101000a900460ff16611c0e565b6111aa33730572798938a8aa670b31b4369733a890e56684fd848673ffffffffffffffffffffffffffffffffffffffff16611ea8909392919063ffffffff16565b6111f6338260065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16611adb9092919063ffffffff16565b3373ffffffffffffffffffffffffffffffffffffffff167e16ce2cbe3b5120a45eec705c1be68113bed0934cb608db33f1806aee5b3f098a84848c6040516112419493929190612b4c565b60405180910390a26001965050505050505061125b611e9f565b92915050565b60095481565b61126f611a54565b6112785f611f2a565b565b5f8060025f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663feaf968c6040518163ffffffff1660e01b815260040160a060405180830381865afa1580156112e6573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061130a9190612e27565b5050509150508091505090565b61131f611a54565b600a5f9054906101000a900460ff1615600a5f6101000a81548160ff0219169083151502179055507f885c95dafaf2f1effb171823a8c0625bc71e0d9720c00d8167def5458e82385760405160405180910390a1565b61137d611b5a565b611385611a54565b804710156113c8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113bf90612ee8565b60405180910390fd5b6113e6730572798938a8aa670b31b4369733a890e56684fd82611db6565b730572798938a8aa670b31b4369733a890e56684fd73ffffffffffffffffffffffffffffffffffffffff167fe08eed5bb22ce46ac6172def838c0de5f5c31fec3802434ff8b265d37e1839a18260405161144091906122a8565b60405180910390a2611450611e9f565b50565b60065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b730572798938a8aa670b31b4369733a890e56684fd81565b5f60015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b5f8060035f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663feaf968c6040518163ffffffff1660e01b815260040160a060405180830381865afa158015611524573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906115489190612e27565b5050509150508091505090565b60045f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b5f808360018110156115c1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115b890612931565b60405180910390fd5b5f60095490508460028111156115da576115d961238a565b5b5f60028111156115ed576115ec61238a565b5b0361167b575f6402540be40061160161127a565b61160b9190612f06565b90505f670de0b6b3a764000080896116239190612f7c565b61162d9190612f7c565b90505f828261163c9190612fea565b90505f84670de0b6b3a7640000808c6116559190612f7c565b61165f9190612f7c565b6116699190612fea565b90508181975097505050505050611790565b84600281111561168e5761168d61238a565b5b600160028111156116a2576116a161238a565b5b036116f4575f620f4240876116b79190612f7c565b90505f82670de0b6b3a7640000808a6116d09190612f7c565b6116da9190612f7c565b6116e49190612fea565b9050818195509550505050611790565b8460028111156117075761170661238a565b5b60028081111561171a5761171961238a565b5b0361178c575f6117286114b8565b90505f8790505f82662386f26fc10000836117439190612f7c565b61174d9190612fea565b90505f84670de0b6b3a7640000808c6117669190612f7c565b6117709190612f7c565b61177a9190612fea565b90508181975097505050505050611790565b5f80fd5b509250929050565b5f805f600b5f015f9054906101000a900460ff169250600b600101549150600b600201549050909192565b6060600f5f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20805480602002602001604051908101604052809291908181526020015f905b828210156118cf578382905f5260205f2090600502016040518060c00160405290815f8201548152602001600182015481526020016002820154815260200160038201548152602001600482015f9054906101000a900460ff16600281111561188d5761188c61238a565b5b600281111561189f5761189e61238a565b5b81526020016004820160019054906101000a900460ff1660ff1660ff168152505081526020019060010190611821565b505050509050919050565b5f6118e3611a54565b42841180156118f157508383115b611930576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119279061308a565b60405180910390fd5b84600b5f015f6101000a81548160ff021916908360ff16021790555083600b6001018190555082600b60020181905550816009819055506001600a5f6101000a81548160ff0219169083151502179055507ff83e8fa358d8413a54cdac7e65e2df789237f79a7e5d4e9d77ab23f8e58bd148858585856040516119b694939291906130a8565b60405180910390a160019050949350505050565b60085481565b6119d8611a54565b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611a48575f6040517f1e4fbdf7000000000000000000000000000000000000000000000000000000008152600401611a3f9190612277565b60405180910390fd5b611a5181611f2a565b50565b611a5c611fed565b73ffffffffffffffffffffffffffffffffffffffff16611a7a611490565b73ffffffffffffffffffffffffffffffffffffffff1614611ad957611a9d611fed565b6040517f118cdaa7000000000000000000000000000000000000000000000000000000008152600401611ad09190612277565b60405180910390fd5b565b611b55838473ffffffffffffffffffffffffffffffffffffffff1663a9059cbb8585604051602401611b0e9291906130eb565b604051602081830303815290604052915060e01b6020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050611ff4565b505050565b60025f5403611b95576040517f3ee5aeb500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60025f81905550565b5f80823b90505f8111915050919050565b6b60ef6b1aba6f07233000000081600854611bca9190613112565b1115611c0b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c029061318f565b60405180910390fd5b50565b600f5f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f206040518060c00160405280888152602001878152602001868152602001858152602001846002811115611c8157611c8061238a565b5b81526020018360ff16815250908060018154018082558091505060019003905f5260205f2090600502015f909190919091505f820151815f01556020820151816001015560408201518160020155606082015181600301556080820151816004015f6101000a81548160ff02191690836002811115611d0357611d0261238a565b5b021790555060a08201518160040160016101000a81548160ff021916908360ff160217905550505085600e5f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f828254611d779190613112565b925050819055508560075f828254611d8f9190613112565b925050819055508360085f828254611da79190613112565b92505081905550505050505050565b80471015611dfb57306040517fcd786059000000000000000000000000000000000000000000000000000000008152600401611df29190612277565b60405180910390fd5b5f8273ffffffffffffffffffffffffffffffffffffffff1682604051611e20906131da565b5f6040518083038185875af1925050503d805f8114611e5a576040519150601f19603f3d011682016040523d82523d5f602084013e611e5f565b606091505b5050905080611e9a576040517f1425ea4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b505050565b60015f81905550565b611f24848573ffffffffffffffffffffffffffffffffffffffff166323b872dd868686604051602401611edd939291906131ee565b604051602081830303815290604052915060e01b6020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050611ff4565b50505050565b5f60015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508160015f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b5f33905090565b5f61201e828473ffffffffffffffffffffffffffffffffffffffff1661208990919063ffffffff16565b90505f815114158015612042575080806020019051810190612040919061324d565b155b1561208457826040517f5274afe700000000000000000000000000000000000000000000000000000000815260040161207b9190612277565b60405180910390fd5b505050565b606061209683835f61209e565b905092915050565b6060814710156120e557306040517fcd7860590000000000000000000000000000000000000000000000000000000081526004016120dc9190612277565b60405180910390fd5b5f808573ffffffffffffffffffffffffffffffffffffffff16848660405161210d91906132da565b5f6040518083038185875af1925050503d805f8114612147576040519150601f19603f3d011682016040523d82523d5f602084013e61214c565b606091505b509150915061215c868383612167565b925050509392505050565b60608261217c57612177826121f4565b6121ec565b5f82511480156121a257505f8473ffffffffffffffffffffffffffffffffffffffff163b145b156121e457836040517f9996b3150000000000000000000000000000000000000000000000000000000081526004016121db9190612277565b60405180910390fd5b8190506121ed565b5b9392505050565b5f815111156122065780518082602001fd5b6040517f1425ea4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f61226182612238565b9050919050565b61227181612257565b82525050565b5f60208201905061228a5f830184612268565b92915050565b5f819050919050565b6122a281612290565b82525050565b5f6020820190506122bb5f830184612299565b92915050565b5f80fd5b6122ce81612257565b81146122d8575f80fd5b50565b5f813590506122e9816122c5565b92915050565b6122f881612290565b8114612302575f80fd5b50565b5f81359050612313816122ef565b92915050565b5f806040838503121561232f5761232e6122c1565b5b5f61233c858286016122db565b925050602061234d85828601612305565b9150509250929050565b5f8115159050919050565b61236b81612357565b82525050565b5f6020820190506123845f830184612362565b92915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602160045260245ffd5b600381106123c8576123c761238a565b5b50565b5f8190506123d8826123b7565b919050565b5f6123e7826123cb565b9050919050565b6123f7816123dd565b82525050565b5f60ff82169050919050565b612412816123fd565b82525050565b5f60c08201905061242b5f830189612299565b6124386020830188612299565b6124456040830187612299565b6124526060830186612299565b61245f60808301856123ee565b61246c60a0830184612409565b979650505050505050565b5f6020828403121561248c5761248b6122c1565b5b5f612499848285016122db565b91505092915050565b5f602082840312156124b7576124b66122c1565b5b5f6124c484828501612305565b91505092915050565b5f805f606084860312156124e4576124e36122c1565b5b5f6124f1868287016122db565b9350506020612502868287016122db565b9250506040612513868287016122db565b9150509250925092565b60038110612529575f80fd5b50565b5f8135905061253a8161251d565b92915050565b5f8060408385031215612556576125556122c1565b5b5f61256385828601612305565b92505060206125748582860161252c565b9150509250929050565b5f819050919050565b6125908161257e565b82525050565b5f6020820190506125a95f830184612587565b92915050565b5f6040820190506125c25f830185612299565b6125cf6020830184612299565b9392505050565b5f6060820190506125e95f830186612409565b6125f66020830185612299565b6126036040830184612299565b949350505050565b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b61263d81612290565b82525050565b61264c816123dd565b82525050565b61265b816123fd565b82525050565b60c082015f8201516126755f850182612634565b5060208201516126886020850182612634565b50604082015161269b6040850182612634565b5060608201516126ae6060850182612634565b5060808201516126c16080850182612643565b5060a08201516126d460a0850182612652565b50505050565b5f6126e58383612661565b60c08301905092915050565b5f602082019050919050565b5f6127078261260b565b6127118185612615565b935061271c83612625565b805f5b8381101561274c57815161273388826126da565b975061273e836126f1565b92505060018101905061271f565b5085935050505092915050565b5f6020820190508181035f83015261277181846126fd565b905092915050565b612782816123fd565b811461278c575f80fd5b50565b5f8135905061279d81612779565b92915050565b5f805f80608085870312156127bb576127ba6122c1565b5b5f6127c88782880161278f565b94505060206127d987828801612305565b93505060406127ea87828801612305565b92505060606127fb87828801612305565b91505092959194509250565b5f82825260208201905092915050565b7f53616c65206973207061757365642e00000000000000000000000000000000005f82015250565b5f61284b600f83612807565b915061285682612817565b602082019050919050565b5f6020820190508181035f8301526128788161283f565b9050919050565b7f436f6e74726163742041646472657373000000000000000000000000000000005f82015250565b5f6128b3601083612807565b91506128be8261287f565b602082019050919050565b5f6020820190508181035f8301526128e0816128a7565b9050919050565b7f20496e76616c696420696e70757420616d6f756e7400000000000000000000005f82015250565b5f61291b601583612807565b9150612926826128e7565b602082019050919050565b5f6020820190508181035f8301526129488161290f565b9050919050565b7f2053616c65206973206e6f742073746172746564206f722073616c65206973205f8201527f656e646564000000000000000000000000000000000000000000000000000000602082015250565b5f6129a9602583612807565b91506129b48261294f565b604082019050919050565b5f6020820190508181035f8301526129d68161299d565b9050919050565b5f815190506129eb816122ef565b92915050565b5f60208284031215612a0657612a056122c1565b5b5f612a13848285016129dd565b91505092915050565b7f4e6f7420656e6f75676820746f6b656e7320696e20636f6e74726163740000005f82015250565b5f612a50601d83612807565b9150612a5b82612a1c565b602082019050919050565b5f6020820190508181035f830152612a7d81612a44565b9050919050565b7f496e73756666696369656e74204e61746976652076616c7565000000000000005f82015250565b5f612ab8601983612807565b9150612ac382612a84565b602082019050919050565b5f6020820190508181035f830152612ae581612aac565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f612b2382612290565b9150612b2e83612290565b9250828203905081811115612b4657612b45612aec565b5b92915050565b5f608082019050612b5f5f830187612299565b612b6c6020830186612299565b612b796040830185612299565b612b8660608301846123ee565b95945050505050565b7f5553445420616464726573732063616e6e6f74206265207a65726f00000000005f82015250565b5f612bc3601b83612807565b9150612bce82612b8f565b602082019050919050565b5f6020820190508181035f830152612bf081612bb7565b9050919050565b7f42544320616464726573732063616e6e6f74206265207a65726f0000000000005f82015250565b5f612c2b601a83612807565b9150612c3682612bf7565b602082019050919050565b5f6020820190508181035f830152612c5881612c1f565b9050919050565b7f4743585020616464726573732063616e6e6f74206265207a65726f00000000005f82015250565b5f612c93601b83612807565b9150612c9e82612c5f565b602082019050919050565b5f6020820190508181035f830152612cc081612c87565b9050919050565b5f604082019050612cda5f830185612268565b612ce76020830184612268565b9392505050565b7f496e76616c696420746f6b656e207479706500000000000000000000000000005f82015250565b5f612d22601283612807565b9150612d2d82612cee565b602082019050919050565b5f6020820190508181035f830152612d4f81612d16565b9050919050565b7f496e73756666696369656e7420616c6c6f77616e6365000000000000000000005f82015250565b5f612d8a601683612807565b9150612d9582612d56565b602082019050919050565b5f6020820190508181035f830152612db781612d7e565b9050919050565b5f69ffffffffffffffffffff82169050919050565b612ddc81612dbe565b8114612de6575f80fd5b50565b5f81519050612df781612dd3565b92915050565b612e068161257e565b8114612e10575f80fd5b50565b5f81519050612e2181612dfd565b92915050565b5f805f805f60a08688031215612e4057612e3f6122c1565b5b5f612e4d88828901612de9565b9550506020612e5e88828901612e13565b9450506040612e6f888289016129dd565b9350506060612e80888289016129dd565b9250506080612e9188828901612de9565b9150509295509295909350565b7f496e73756666696369656e742062616c616e63650000000000000000000000005f82015250565b5f612ed2601483612807565b9150612edd82612e9e565b602082019050919050565b5f6020820190508181035f830152612eff81612ec6565b9050919050565b5f612f108261257e565b9150612f1b8361257e565b9250828202612f298161257e565b91507f800000000000000000000000000000000000000000000000000000000000000084145f84121615612f6057612f5f612aec565b5b8282058414831517612f7557612f74612aec565b5b5092915050565b5f612f8682612290565b9150612f9183612290565b9250828202612f9f81612290565b91508282048414831517612fb657612fb5612aec565b5b5092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f612ff482612290565b9150612fff83612290565b92508261300f5761300e612fbd565b5b828204905092915050565b7f456e642074696d65206d7573742062652067726561746572207468616e2073745f8201527f6172742074696d65000000000000000000000000000000000000000000000000602082015250565b5f613074602883612807565b915061307f8261301a565b604082019050919050565b5f6020820190508181035f8301526130a181613068565b9050919050565b5f6080820190506130bb5f830187612409565b6130c86020830186612299565b6130d56040830185612299565b6130e26060830184612299565b95945050505050565b5f6040820190506130fe5f830185612268565b61310b6020830184612299565b9392505050565b5f61311c82612290565b915061312783612290565b925082820190508082111561313f5761313e612aec565b5b92915050565b7f49434f20746f6b656e20636170207265616368656400000000000000000000005f82015250565b5f613179601583612807565b915061318482613145565b602082019050919050565b5f6020820190508181035f8301526131a68161316d565b9050919050565b5f81905092915050565b50565b5f6131c55f836131ad565b91506131d0826131b7565b5f82019050919050565b5f6131e4826131ba565b9150819050919050565b5f6060820190506132015f830186612268565b61320e6020830185612268565b61321b6040830184612299565b949350505050565b61322c81612357565b8114613236575f80fd5b50565b5f8151905061324781613223565b92915050565b5f60208284031215613262576132616122c1565b5b5f61326f84828501613239565b91505092915050565b5f81519050919050565b5f5b8381101561329f578082015181840152602081019050613284565b5f8484015250505050565b5f6132b482613278565b6132be81856131ad565b93506132ce818560208601613282565b80840191505092915050565b5f6132e582846132aa565b91508190509291505056fea2646970667358221220b97dfa33fc7fcbaa925bb0fe64dbc962b44a6237117e3ee898e621af61921fb564736f6c63430008140033
Verified Source Code Full Match
Compiler: v0.8.20+commit.a1b79de6
EVM: shanghai
Optimization: No
ico.sol 578 lines
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.20;
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);
}
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;
}
}
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);
constructor(address initialOwner) {
if (initialOwner == address(0)) {
revert OwnableInvalidOwner(address(0));
}
_transferOwnership(initialOwner);
}
modifier onlyOwner() {
_checkOwner();
_;
}
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());
}
}
function renounceOwnership() public virtual onlyOwner {
_transferOwnership(address(0));
}
function transferOwnership(address newOwner) public virtual onlyOwner {
if (newOwner == address(0)) {
revert OwnableInvalidOwner(address(0));
}
_transferOwnership(newOwner);
}
function _transferOwnership(address newOwner) internal virtual {
address oldOwner = _owner;
_owner = newOwner;
emit OwnershipTransferred(oldOwner, newOwner);
}
}
abstract contract ReentrancyGuard {
uint256 private constant NOT_ENTERED = 1;
uint256 private constant ENTERED = 2;
uint256 private _status;
error ReentrancyGuardReentrantCall();
constructor() {
_status = NOT_ENTERED;
}
modifier nonReentrant() {
_nonReentrantBefore();
_;
_nonReentrantAfter();
}
function _nonReentrantBefore() private {
// On the first call to nonReentrant, _status will be NOT_ENTERED
if (_status == ENTERED) {
revert ReentrancyGuardReentrantCall();
}
// Any calls to nonReentrant after this point will fail
_status = ENTERED;
}
function _nonReentrantAfter() private {
// By storing the original value once again, a refund is triggered (see
// https://eips.ethereum.org/EIPS/eip-2200)
_status = NOT_ENTERED;
}
function _reentrancyGuardEntered() internal view returns (bool) {
return _status == ENTERED;
}
}
library Address {
error AddressInsufficientBalance(address account);
/**
* @dev There's no code at `target` (it is not a contract).
*/
error AddressEmptyCode(address target);
/**
* @dev A call to an address target failed. The target may have reverted.
*/
error FailedInnerCall();
function sendValue(address payable recipient, uint256 amount) internal {
if (address(this).balance < amount) {
revert AddressInsufficientBalance(address(this));
}
(bool success, ) = recipient.call{value: amount}("");
if (!success) {
revert FailedInnerCall();
}
}
function functionCall(address target, bytes memory data) internal returns (bytes memory) {
return functionCallWithValue(target, data, 0);
}
function functionCallWithValue(address target, bytes memory data, uint256 value) internal returns (bytes memory) {
if (address(this).balance < value) {
revert AddressInsufficientBalance(address(this));
}
(bool success, bytes memory returndata) = target.call{value: value}(data);
return verifyCallResultFromTarget(target, success, returndata);
}
function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {
(bool success, bytes memory returndata) = target.staticcall(data);
return verifyCallResultFromTarget(target, success, returndata);
}
function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {
(bool success, bytes memory returndata) = target.delegatecall(data);
return verifyCallResultFromTarget(target, success, returndata);
}
function verifyCallResultFromTarget(
address target,
bool success,
bytes memory returndata
) internal view returns (bytes memory) {
if (!success) {
_revert(returndata);
} else {
// only check if target is a contract if the call was successful and the return data is empty
// otherwise we already know that it was a contract
if (returndata.length == 0 && target.code.length == 0) {
revert AddressEmptyCode(target);
}
return returndata;
}
}
function verifyCallResult(bool success, bytes memory returndata) internal pure returns (bytes memory) {
if (!success) {
_revert(returndata);
} else {
return returndata;
}
}
/**
* @dev Reverts with returndata if present. Otherwise reverts with {FailedInnerCall}.
*/
function _revert(bytes memory returndata) private pure {
// Look for revert reason and bubble it up if present
if (returndata.length > 0) {
// The easiest way to bubble the revert reason is using memory via assembly
/// @solidity memory-safe-assembly
assembly {
let returndata_size := mload(returndata)
revert(add(32, returndata), returndata_size)
}
} else {
revert FailedInnerCall();
}
}
}
interface IERC20Permit {
function permit(
address owner,
address spender,
uint256 value,
uint256 deadline,
uint8 v,
bytes32 r,
bytes32 s
) external;
function nonces(address owner) external view returns (uint256);
function DOMAIN_SEPARATOR() external view returns (bytes32);
}
interface IERC20 {
event Transfer(address indexed from, address indexed to, uint256 value);
event Approval(address indexed owner, address indexed spender, uint256 value);
function totalSupply() external view returns (uint256);
function decimals() external view returns (uint8);
function balanceOf(address account) external view returns (uint256);
function transfer(address to, uint256 value) external returns (bool);
function allowance(address owner, address spender) external view returns (uint256);
function approve(address spender, uint256 value) external returns (bool);
function transferFrom(address from, address to, uint256 value) external returns (bool);
}
library SafeERC20 {
using Address for address;
error SafeERC20FailedOperation(address token);
error SafeERC20FailedDecreaseAllowance(address spender, uint256 currentAllowance, uint256 requestedDecrease);
function safeTransfer(IERC20 token, address to, uint256 value) internal {
_callOptionalReturn(token, abi.encodeCall(token.transfer, (to, value)));
}
function safeTransferFrom(IERC20 token, address from, address to, uint256 value) internal {
_callOptionalReturn(token, abi.encodeCall(token.transferFrom, (from, to, value)));
}
function safeIncreaseAllowance(IERC20 token, address spender, uint256 value) internal {
uint256 oldAllowance = token.allowance(address(this), spender);
forceApprove(token, spender, oldAllowance + value);
}
function safeDecreaseAllowance(IERC20 token, address spender, uint256 requestedDecrease) internal {
unchecked {
uint256 currentAllowance = token.allowance(address(this), spender);
if (currentAllowance < requestedDecrease) {
revert SafeERC20FailedDecreaseAllowance(spender, currentAllowance, requestedDecrease);
}
forceApprove(token, spender, currentAllowance - requestedDecrease);
}
}
function forceApprove(IERC20 token, address spender, uint256 value) internal {
bytes memory approvalCall = abi.encodeCall(token.approve, (spender, value));
if (!_callOptionalReturnBool(token, approvalCall)) {
_callOptionalReturn(token, abi.encodeCall(token.approve, (spender, 0)));
_callOptionalReturn(token, approvalCall);
}
}
function _callOptionalReturn(IERC20 token, bytes memory data) private {
bytes memory returndata = address(token).functionCall(data);
if (returndata.length != 0 && !abi.decode(returndata, (bool))) {
revert SafeERC20FailedOperation(address(token));
}
}
function _callOptionalReturnBool(IERC20 token, bytes memory data) private returns (bool) {
(bool success, bytes memory returndata) = address(token).call(data);
return success && (returndata.length == 0 || abi.decode(returndata, (bool))) && address(token).code.length > 0;
}
}
contract GcxpIco is ReentrancyGuard, Ownable {
using SafeERC20 for IERC20;
using Address for address;
// Chainlink price feed for ETH/USD
AggregatorV3Interface internal priceFeedForEth;
// Chainlink price feed for BTC/USD
AggregatorV3Interface internal priceFeedForBtc;
address public constant FUNDER_WALLET = 0x0572798938a8aA670B31b4369733a890E56684fd;
address public usdtToken = 0xdAC17F958D2ee523a2206206994597C13D831ec7;
address public btcToken= 0x2260FAC5E5542a773Aa44fBCfeDf7C193bc2C599;
address public gcxpCoin = 0x09580506415e36c1DdE0d08eB8910ADEC13c064b;
uint256 constant GCXP_DECIMALS = 1e18;
uint256 public constant ICO_TOTAL_LIMIT = 30_000_000_000 * 1e18; // 30 Billion
uint256 public usdtRaised;
uint256 public totalSoldGcxpToken;
uint256 public gcxpPerDollar = 1e16; // 0.01 in wei where 1 GCXP = 0.01 USD
bool public isActive;
enum BuyType {
eth,
usdt,
btc
}
struct ICOConfig {
uint8 currentSalePhase;
uint256 saleStartTime;
uint256 saleEndTime;
}
struct UserDeposit {
uint256 dollarValue; // dollar amount
uint256 estimatedAmount; // user payed amount
uint256 userGcxpAmount; // user estimate GCXP
uint256 investTime; // user invest time in second
BuyType currencyType; // store currency type
uint8 salePhaseType; // store sale phase type
}
ICOConfig private _icoConfig;
mapping(address => uint256) public userPurchaseInUsd;
mapping(address => UserDeposit[]) public userDeposits; // userAddress => UserDeposit
event BuyWithToken(address indexed userAddress, uint256 usdAmount, uint256 estimatedAmount, uint256 gcxpAmount, BuyType buyType);
event BuyWithNative(address indexed userAddress, uint256 usdAmount, uint256 estimatedNative, uint256 gcxpAmount, BuyType buyType);
event TokenAddressesUpdated(address indexed usdtToken, address btcToken, address gcxpCoin);
event NativeWithdraw(address indexed to, uint256 amount);
event SaleConfigured(uint8 phase, uint256 start, uint256 end, uint256 price);
event ToggleSale();
modifier validAddress(address _addr) {
require(_addr != address(0), "Not valid address");
_;
}
modifier onlyEoA(address _account) {
require(!isContract(_account), "Contract Address");
_;
}
modifier nonZero(uint256 amount) {
require(amount >= 1 ," Invalid input amount");
_;
}
modifier notPaused() {
require(isActive, "Sale is paused.");
_;
}
modifier isSaleStarted() {
require(block.timestamp > _icoConfig.saleStartTime && _icoConfig.saleEndTime > block.timestamp," Sale is not started or sale is ended");
_;
}
constructor(address _priceFeedForEth, address _priceFeedForBtc) Ownable(msg.sender) {
require(_priceFeedForEth != address(0), "Invalid ETH feed");
require(_priceFeedForBtc != address(0), "Invalid BTC feed");
priceFeedForEth = AggregatorV3Interface(_priceFeedForEth);
priceFeedForBtc = AggregatorV3Interface(_priceFeedForBtc);
}
/**** OnlyOwner ****/
/// @notice Function to toggle sale if needed only by owner
function toggleSale() external onlyOwner{
isActive = !isActive;
emit ToggleSale();
}
function updateTokenAddresses(address _usdtToken, address _btcToken, address _gcxpCoin) external onlyOwner {
require(_usdtToken != address(0), "USDT address cannot be zero");
require(_btcToken != address(0), "BTC address cannot be zero");
require(_gcxpCoin != address(0), "GCXP address cannot be zero");
usdtToken = _usdtToken;
btcToken = _btcToken;
gcxpCoin = _gcxpCoin;
emit TokenAddressesUpdated(_usdtToken, _btcToken, _gcxpCoin);
}
/// @notice This function is used to config the sale
/// @param setCurrentSalePhase This is used to set the sale phase like 1,2,3
/// @param saleStart The start time of the phase
/// @param saleEnd The end time of the phase
/// @param _gcxpPerDollar The gcxp coin price in each phase, pass the value in wei
function configSale(uint8 setCurrentSalePhase, uint256 saleStart, uint256 saleEnd, uint256 _gcxpPerDollar) external onlyOwner returns(bool) {
require(saleStart > block.timestamp && saleEnd > saleStart ,"End time must be greater than start time");
_icoConfig.currentSalePhase = setCurrentSalePhase;
_icoConfig.saleStartTime = saleStart;
_icoConfig.saleEndTime = saleEnd;
gcxpPerDollar = _gcxpPerDollar;
isActive = true;
emit SaleConfigured(setCurrentSalePhase, saleStart, saleEnd, _gcxpPerDollar);
return true;
}
/// @notice This function is used for withdraw the token from contract if token stuck
/// @param tokenAddress The token contract address
/// @param tokenAmount The exact amount which is availabe on contract address, we have to pass tokenAmount in wei
function getTokenFromContract(address tokenAddress, uint256 tokenAmount) external onlyOwner returns(bool){
IERC20 token = IERC20(tokenAddress);
token.safeTransfer(FUNDER_WALLET, tokenAmount);
return true;
}
/// @dev Owner-only function to withdraw native ETH from the contract.
/// @param amount The amount of ETH (in wei) to withdraw.
function withdrawNative(uint256 amount) external nonReentrant onlyOwner {
require(address(this).balance >= amount, "Insufficient balance");
Address.sendValue(payable(FUNDER_WALLET), amount);
emit NativeWithdraw(FUNDER_WALLET, amount);
}
/**** Public Functions ****/
/// @notice Function is used to get phase details
function getICOConfig() external view returns (
uint8 _currentSalePhase,
uint256 _saleStartTime,
uint256 _saleEndTime
) {
_currentSalePhase = _icoConfig.currentSalePhase;
_saleStartTime = _icoConfig.saleStartTime;
_saleEndTime = _icoConfig.saleEndTime;
}
/// @notice Function to get the live eth price in usd
function getEthPriceInUSD() public view returns (int256) {
(, int256 price, , , ) = priceFeedForEth.latestRoundData();
return price;
}
/// @notice Function to get the live btc token price in usd
function getBtcPriceInUSD() public view returns (int256) {
(, int256 price, , , ) = priceFeedForBtc.latestRoundData();
return price;
}
/// @notice Function is used to get the estimated value of assert and gcxp coin corresponding to usd
/// @param usdAmount The usd amount from whihc user wanted to buy gcxp coin we have to pass in real number
/// @param buyType From which assert user wanted to buy the gcxp coin like 0 mean eth, 1 mean usdt, and 2 mean btc
function estimateFund(uint256 usdAmount, BuyType buyType) public view nonZero(usdAmount) returns(uint256, uint256){
uint256 oneTokenPriceInUsd = gcxpPerDollar;
if(BuyType.eth == buyType){
int256 liveEthPrice = getEthPriceInUSD() * 10 ** 10; // eth is 18 decimals
uint256 dollarAmount = usdAmount * GCXP_DECIMALS * GCXP_DECIMALS;
uint256 ethInDollar = (dollarAmount) / uint256(liveEthPrice) ;
uint256 gcxpAmount = (usdAmount * GCXP_DECIMALS * GCXP_DECIMALS) / oneTokenPriceInUsd;
return (ethInDollar, gcxpAmount);
}
if (BuyType.usdt == buyType){
uint256 usdtAmount = usdAmount * (10**6); // usdt is 6 decimals
uint256 gcxpAmount = (usdAmount * GCXP_DECIMALS * GCXP_DECIMALS) / oneTokenPriceInUsd;
return (usdtAmount, gcxpAmount);
}
if (BuyType.btc == buyType){
int256 liveBtcPrice = getBtcPriceInUSD(); // btc is 8 decimals
uint256 dollarAmount = usdAmount;
uint256 btcInDollar = (dollarAmount *10**16) / uint256(liveBtcPrice) ;
uint256 gcxpAmount = (usdAmount * GCXP_DECIMALS * GCXP_DECIMALS) / oneTokenPriceInUsd;
return (btcInDollar, gcxpAmount);
}
revert();
}
/// @notice This function is used buy Gcxp coin using token(USDT, BTC) in all sale
/// @param usdAmount The usdAmount which means if user want to buy for 50$ so just pass 50
/// @param buyType From which token user wanted to buy the gcxp coin like 1 mean usdt, and 2 mean btc
function buyWithToken(uint256 usdAmount, BuyType buyType) external
nonReentrant
notPaused
nonZero(usdAmount)
onlyEoA(msg.sender)
isSaleStarted
returns (bool)
{
require(buyType == BuyType.usdt || buyType == BuyType.btc, "Invalid token type");
address tokenAddress;
tokenAddress = (buyType == BuyType.usdt) ? usdtToken : btcToken;
IERC20 token = IERC20(tokenAddress);
uint256 estimatedAmount;
uint256 gcxpAmount;
(estimatedAmount, gcxpAmount) = estimateFund(usdAmount, buyType);
require(IERC20(gcxpCoin).balanceOf(address(this)) >= gcxpAmount,"Not enough tokens in contract");
_checkSupply(gcxpAmount);
require(token.allowance(msg.sender, address(this)) >= estimatedAmount,"Insufficient allowance");
updateUserState(usdAmount, estimatedAmount, gcxpAmount, block.timestamp, buyType, _icoConfig.currentSalePhase);
token.safeTransferFrom(msg.sender, FUNDER_WALLET, estimatedAmount);
IERC20(gcxpCoin).safeTransfer(msg.sender, gcxpAmount);
emit BuyWithToken(msg.sender, usdAmount, estimatedAmount, gcxpAmount, buyType);
return true;
}
/// @notice This function is used buy Gcxp coin using native token
/// @param usdAmount The amount is in usd means if user want to buy for 50$ so just pass 50
function buyWithNative(uint256 usdAmount) external payable
nonReentrant
notPaused
onlyEoA(msg.sender)
nonZero(usdAmount)
isSaleStarted
returns (bool)
{
uint256 estimatedNative;
uint256 gcxpAmount;
(estimatedNative, gcxpAmount) = estimateFund(usdAmount, BuyType.eth);
require(IERC20(gcxpCoin).balanceOf(address(this)) >= gcxpAmount,"Not enough tokens in contract");
_checkSupply(gcxpAmount);
require(msg.value >= estimatedNative, "Insufficient Native value");
updateUserState(usdAmount, estimatedNative, gcxpAmount, block.timestamp, BuyType.eth, _icoConfig.currentSalePhase);
if(msg.value > estimatedNative){
uint256 userExtraCoin = msg.value - estimatedNative;
Address.sendValue(payable(msg.sender), userExtraCoin);
}
Address.sendValue(payable(FUNDER_WALLET), estimatedNative);
IERC20(gcxpCoin).safeTransfer(msg.sender, gcxpAmount);
emit BuyWithNative(msg.sender, usdAmount, estimatedNative, gcxpAmount, BuyType.eth);
return true;
}
/// @notice To get the user invest details
/// @param userAddress The user address from which we need to get details
function getUserDetails(address userAddress) external view returns (UserDeposit[] memory) {
return userDeposits[userAddress];
}
/**** Internal ****/
/// @dev function to update the user details
function updateUserState(uint256 usdAmount, uint256 estimatedAmount, uint256 gcxpAmount, uint256 investTime, BuyType buyType, uint8 salePhase) internal {
userDeposits[msg.sender].push(UserDeposit(usdAmount, estimatedAmount, gcxpAmount, investTime, buyType, salePhase));
userPurchaseInUsd[msg.sender] += usdAmount;
usdtRaised += usdAmount;
totalSoldGcxpToken += gcxpAmount;
}
/// @dev Function to check is total supply reached or not
/// @param _tokenAmount The gcxp coin amount
function _checkSupply(uint256 _tokenAmount) internal view {
require(totalSoldGcxpToken + _tokenAmount <= ICO_TOTAL_LIMIT, "ICO token cap reached");
}
/// @dev Function is to check caller is contract or not
/// @param account The address
function isContract(address account) internal view returns (bool) {
uint256 size;
assembly {
size := extcodesize(account)
}
return size > 0;
}
receive() external payable { }
}
Read Contract
FUNDER_WALLET 0x8a5a0060 → address
ICO_TOTAL_LIMIT 0x084faa43 → uint256
btcToken 0x074bc101 → address
estimateFund 0xac55ae1f → uint256, uint256
gcxpCoin 0x8917db45 → address
gcxpPerDollar 0x7097cdc4 → uint256
getBtcPriceInUSD 0x9833b0ff → int256
getEthPriceInUSD 0x787beb34 → int256
getICOConfig 0xb712a2ab → uint8, uint256, uint256
getUserDetails 0xcc3d967b → tuple[]
isActive 0x22f3e2d4 → bool
owner 0x8da5cb5b → address
totalSoldGcxpToken 0xe049efa1 → uint256
usdtRaised 0x0ec1ecac → uint256
usdtToken 0xa98ad46c → address
userDeposits 0x08f43333 → uint256, uint256, uint256, uint256, uint8, uint8
userPurchaseInUsd 0x1797f310 → uint256
Write Contract 9 functions
These functions modify contract state and require a wallet transaction to execute.
buyWithNative 0x31ad36ab
uint256 usdAmount
returns: bool
buyWithToken 0x5b85e1f2
uint256 usdAmount
uint8 buyType
returns: bool
configSale 0xd4e02786
uint8 setCurrentSalePhase
uint256 saleStart
uint256 saleEnd
uint256 _gcxpPerDollar
returns: bool
getTokenFromContract 0x08f2d320
address tokenAddress
uint256 tokenAmount
returns: bool
renounceOwnership 0x715018a6
No parameters
toggleSale 0x7d8966e4
No parameters
transferOwnership 0xf2fde38b
address newOwner
updateTokenAddresses 0x4e0e4879
address _usdtToken
address _btcToken
address _gcxpCoin
withdrawNative 0x84276d81
uint256 amount
Recent Transactions
No transactions found for this address