Address Contract Verified
Address
0x42b91f1d05afeA671a2dA3c780eDa2aBf0A2A366
Balance
0.037837 ETH
Nonce
1
Code Size
11891 bytes
Creator
0x8f903dBE...f2F7 at tx 0x31c6c822...054666
Indexed Transactions
0
Contract Bytecode
11891 bytes
0x6080604052600436106101fc5760003560e01c806351453f9d1161010d578063a2d6b3c5116100a0578063cc46997a1161006f578063cc46997a14610759578063d539139314610784578063d547741f146107af578063dd62ed3e146107d8578063e6b2603b1461081557610203565b8063a2d6b3c514610689578063a457c2d7146106b4578063a9059cbb146106f1578063ab6e7b4a1461072e57610203565b806391d14854116100dc57806391d14854146105cd57806392eefe9b1461060a57806395d89b4114610633578063a217fddf1461065e57610203565b806351453f9d1461050f578063557ed1ba1461053a57806363c60f811461056557806370a082311461059057610203565b806323b872dd1161019057806336568abe1161015f57806336568abe1461042857806336cbcee414610451578063395093511461047c5780634f5b7dc2146104b95780634f848312146104e457610203565b806323b872dd1461035a578063248a9ca3146103975780632f2ff15d146103d4578063313ce567146103fd57610203565b80631311c293116101cc5780631311c293146102d657806318160ddd146102ed57806318c76b241461031857806321b79d981461034357610203565b8062ae3bf81461020857806301ffc9a71461023157806306fdde031461026e578063095ea7b31461029957610203565b3661020357005b600080fd5b34801561021457600080fd5b5061022f600480360381019061022a9190611f7d565b61082c565b005b34801561023d57600080fd5b5061025860048036038101906102539190612117565b610959565b60405161026591906124c6565b60405180910390f35b34801561027a57600080fd5b506102836109d3565b60405161029091906124fc565b60405180910390f35b3480156102a557600080fd5b506102c060048036038101906102bb919061203d565b610a65565b6040516102cd91906124c6565b60405180910390f35b3480156102e257600080fd5b506102eb610a81565b005b3480156102f957600080fd5b50610302610cc3565b60405161030f919061269e565b60405180910390f35b34801561032457600080fd5b5061032d610ccd565b60405161033a919061269e565b60405180910390f35b34801561034f57600080fd5b50610358610daf565b005b34801561036657600080fd5b50610381600480360381019061037c9190611fea565b610e28565b60405161038e91906124c6565b60405180910390f35b3480156103a357600080fd5b506103be60048036038101906103b991906120aa565b610e50565b6040516103cb91906124e1565b60405180910390f35b3480156103e057600080fd5b506103fb60048036038101906103f691906120d7565b610e6f565b005b34801561040957600080fd5b50610412610e90565b60405161041f91906126b9565b60405180910390f35b34801561043457600080fd5b5061044f600480360381019061044a91906120d7565b610ea7565b005b34801561045d57600080fd5b50610466610f2a565b604051610473919061269e565b60405180910390f35b34801561048857600080fd5b506104a3600480360381019061049e919061203d565b6110d1565b6040516104b091906124c6565b60405180910390f35b3480156104c557600080fd5b506104ce611101565b6040516104db919061269e565b60405180910390f35b3480156104f057600080fd5b506104f9611128565b604051610506919061269e565b60405180910390f35b34801561051b57600080fd5b5061052461112e565b604051610531919061269e565b60405180910390f35b34801561054657600080fd5b5061054f611154565b60405161055c919061269e565b60405180910390f35b34801561057157600080fd5b5061057a61115c565b604051610587919061269e565b60405180910390f35b34801561059c57600080fd5b506105b760048036038101906105b29190611f7d565b611162565b6040516105c4919061269e565b60405180910390f35b3480156105d957600080fd5b506105f460048036038101906105ef91906120d7565b6111ab565b60405161060191906124c6565b60405180910390f35b34801561061657600080fd5b50610631600480360381019061062c9190611f7d565b611215565b005b34801561063f57600080fd5b50610648611267565b60405161065591906124fc565b60405180910390f35b34801561066a57600080fd5b506106736112f9565b60405161068091906124e1565b60405180910390f35b34801561069557600080fd5b5061069e611300565b6040516106ab9190612482565b60405180910390f35b3480156106c057600080fd5b506106db60048036038101906106d6919061203d565b611326565b6040516106e891906124c6565b60405180910390f35b3480156106fd57600080fd5b506107186004803603810190610713919061203d565b611396565b60405161072591906124c6565b60405180910390f35b34801561073a57600080fd5b506107436113b2565b604051610750919061269e565b60405180910390f35b34801561076557600080fd5b5061076e6113b8565b60405161077b919061269e565b60405180910390f35b34801561079057600080fd5b506107996113be565b6040516107a691906124e1565b60405180910390f35b3480156107bb57600080fd5b506107d660048036038101906107d191906120d7565b6113e2565b005b3480156107e457600080fd5b506107ff60048036038101906107fa9190611faa565b611403565b60405161080c919061269e565b60405180910390f35b34801561082157600080fd5b5061082a61148a565b005b6000801b61083981611511565b60008273ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b81526004016108749190612482565b60206040518083038186803b15801561088c57600080fd5b505afa1580156108a0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108c49190612144565b90508273ffffffffffffffffffffffffffffffffffffffff1663a9059cbb33836040518363ffffffff1660e01b815260040161090192919061249d565b602060405180830381600087803b15801561091b57600080fd5b505af115801561092f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610953919061207d565b50505050565b60007f7965db0b000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806109cc57506109cb82611525565b5b9050919050565b6060600180546109e290612903565b80601f0160208091040260200160405190810160405280929190818152602001828054610a0e90612903565b8015610a5b5780601f10610a3057610100808354040283529160200191610a5b565b820191906000526020600020905b815481529060010190602001808311610a3e57829003601f168201915b5050505050905090565b600080339050610a7681858561158f565b600191505092915050565b7f9f2df0fed2c77648de5860a4cc508cd0818c85b8b8a1ab4ceeef8d981c8956a6610aab81611511565b600073ffffffffffffffffffffffffffffffffffffffff16601060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415610b3d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b349061255e565b60405180910390fd5b6000610b47610f2a565b90506000811415610b8d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b84906125fe565b60405180910390fd5b8060046000828254610b9f9190612706565b9250508190555080600f6000828254610bb89190612706565b925050819055508060136000601060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254610c309190612706565b92505081905550601060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051610cb7919061269e565b60405180910390a35050565b6000600f54905090565b600060136000601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205460136000601160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054600f54610da091906127e7565b610daa91906127e7565b905090565b7f9f2df0fed2c77648de5860a4cc508cd0818c85b8b8a1ab4ceeef8d981c8956a6610dd981611511565b600060055414610e1e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e159061257e565b60405180910390fd5b4260058190555050565b600080339050610e3985828561175a565b610e448585856117e6565b60019150509392505050565b6000806000838152602001908152602001600020600101549050919050565b610e7882610e50565b610e8181611511565b610e8b8383611a5d565b505050565b6000600360009054906101000a900460ff16905090565b610eaf611b3d565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614610f1c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f139061267e565b60405180910390fd5b610f268282611b45565b5050565b600080610f35611101565b905060006007549050600080600754905060006008549050600060075486111561104957600854600754610f69919061278d565b905060005b6019811015611043576000600c54600b5486610f8a919061278d565b610f94919061275c565b90506000600c54600b5486610fa9919061278d565b610fb3919061275c565b90508188610fc19190612706565b97508587610fcf9190612706565b965087891115610ffd578082610fe5919061278d565b84610ff09190612706565b935081955080945061102e565b6000878a61100b91906127e7565b90508181611019919061278d565b856110249190612706565b9450505050611043565b5050808061103b90612935565b915050610f6e565b5061105a565b60085486611057919061278d565b90505b6009548611156110995760006009548761107491906127e7565b90506000600a5482611086919061278d565b905080836110949190612706565b925050505b600e5481116110b557600454816110b091906127e7565b6110c6565b600454600e546110c591906127e7565b5b965050505050505090565b6000803390506110f68185856110e78589611403565b6110f19190612706565b61158f565b600191505092915050565b60008061110c61112e565b905060006006548261111e919061275c565b9050809250505090565b60055481565b6000806005541161114057600061114f565b6005544261114e91906127e7565b5b905090565b600042905090565b60045481565b6000601360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b600080600084815260200190815260200160002060000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b6000801b61122281611511565b81601060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505050565b60606002805461127690612903565b80601f01602080910402602001604051908101604052809291908181526020018280546112a290612903565b80156112ef5780601f106112c4576101008083540402835291602001916112ef565b820191906000526020600020905b8154815290600101906020018083116112d257829003601f168201915b5050505050905090565b6000801b81565b601060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60008033905060006113388286611403565b90508381101561137d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113749061265e565b60405180910390fd5b61138a828686840361158f565b60019250505092915050565b6000803390506113a78185856117e6565b600191505092915050565b600d5481565b600e5481565b7f9f2df0fed2c77648de5860a4cc508cd0818c85b8b8a1ab4ceeef8d981c8956a681565b6113eb82610e50565b6113f481611511565b6113fe8383611b45565b505050565b6000601460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b6000801b61149781611511565b60003373ffffffffffffffffffffffffffffffffffffffff16476040516114bd90612433565b60006040518083038185875af1925050503d80600081146114fa576040519150601f19603f3d011682016040523d82523d6000602084013e6114ff565b606091505b505090508061150d57600080fd5b5050565b6115228161151d611b3d565b611c26565b50565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156115ff576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115f69061263e565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561166f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116669061259e565b60405180910390fd5b80601460008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258360405161174d919061269e565b60405180910390a3505050565b60006117668484611403565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81146117e057818110156117d2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117c9906125be565b60405180910390fd5b6117df848484840361158f565b5b50505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611856576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161184d9061261e565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156118c6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118bd9061253e565b60405180910390fd5b6000601360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490508181101561194d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611944906125de565b60405180910390fd5b818161195991906127e7565b601360008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555081601360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546119eb9190612706565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051611a4f919061269e565b60405180910390a350505050565b611a6782826111ab565b611b3957600160008084815260200190815260200160002060000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550611ade611b3d565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45b5050565b600033905090565b611b4f82826111ab565b15611c2257600080600084815260200190815260200160002060000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550611bc7611b3d565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16837ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b60405160405180910390a45b5050565b611c3082826111ab565b611cbf57611c558173ffffffffffffffffffffffffffffffffffffffff166014611cc3565b611c638360001c6020611cc3565b604051602001611c74929190612448565b6040516020818303038152906040526040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cb691906124fc565b60405180910390fd5b5050565b606060006002836002611cd6919061278d565b611ce09190612706565b67ffffffffffffffff811115611cf957611cf8612a3a565b5b6040519080825280601f01601f191660200182016040528015611d2b5781602001600182028036833780820191505090505b5090507f300000000000000000000000000000000000000000000000000000000000000081600081518110611d6357611d62612a0b565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053507f780000000000000000000000000000000000000000000000000000000000000081600181518110611dc757611dc6612a0b565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a90535060006001846002611e07919061278d565b611e119190612706565b90505b6001811115611eb1577f3031323334353637383961626364656600000000000000000000000000000000600f861660108110611e5357611e52612a0b565b5b1a60f81b828281518110611e6a57611e69612a0b565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600485901c945080611eaa906128d9565b9050611e14565b5060008414611ef5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611eec9061251e565b60405180910390fd5b8091505092915050565b600081359050611f0e81612dca565b92915050565b600081519050611f2381612de1565b92915050565b600081359050611f3881612df8565b92915050565b600081359050611f4d81612e0f565b92915050565b600081359050611f6281612e26565b92915050565b600081519050611f7781612e26565b92915050565b600060208284031215611f9357611f92612a69565b5b6000611fa184828501611eff565b91505092915050565b60008060408385031215611fc157611fc0612a69565b5b6000611fcf85828601611eff565b9250506020611fe085828601611eff565b9150509250929050565b60008060006060848603121561200357612002612a69565b5b600061201186828701611eff565b935050602061202286828701611eff565b925050604061203386828701611f53565b9150509250925092565b6000806040838503121561205457612053612a69565b5b600061206285828601611eff565b925050602061207385828601611f53565b9150509250929050565b60006020828403121561209357612092612a69565b5b60006120a184828501611f14565b91505092915050565b6000602082840312156120c0576120bf612a69565b5b60006120ce84828501611f29565b91505092915050565b600080604083850312156120ee576120ed612a69565b5b60006120fc85828601611f29565b925050602061210d85828601611eff565b9150509250929050565b60006020828403121561212d5761212c612a69565b5b600061213b84828501611f3e565b91505092915050565b60006020828403121561215a57612159612a69565b5b600061216884828501611f68565b91505092915050565b61217a8161281b565b82525050565b6121898161282d565b82525050565b61219881612839565b82525050565b60006121a9826126d4565b6121b381856126ea565b93506121c38185602086016128a6565b6121cc81612a6e565b840191505092915050565b60006121e2826126d4565b6121ec81856126fb565b93506121fc8185602086016128a6565b80840191505092915050565b60006122156020836126ea565b915061222082612a7f565b602082019050919050565b60006122386023836126ea565b915061224382612aa8565b604082019050919050565b600061225b601f836126ea565b915061226682612af7565b602082019050919050565b600061227e6017836126ea565b915061228982612b20565b602082019050919050565b60006122a16022836126ea565b91506122ac82612b49565b604082019050919050565b60006122c4601d836126ea565b91506122cf82612b98565b602082019050919050565b60006122e76026836126ea565b91506122f282612bc1565b604082019050919050565b600061230a601e836126ea565b915061231582612c10565b602082019050919050565b600061232d6025836126ea565b915061233882612c39565b604082019050919050565b60006123506000836126df565b915061235b82612c88565b600082019050919050565b60006123736024836126ea565b915061237e82612c8b565b604082019050919050565b60006123966017836126fb565b91506123a182612cda565b601782019050919050565b60006123b96025836126ea565b91506123c482612d03565b604082019050919050565b60006123dc6011836126fb565b91506123e782612d52565b601182019050919050565b60006123ff602f836126ea565b915061240a82612d7b565b604082019050919050565b61241e8161288f565b82525050565b61242d81612899565b82525050565b600061243e82612343565b9150819050919050565b600061245382612389565b915061245f82856121d7565b915061246a826123cf565b915061247682846121d7565b91508190509392505050565b60006020820190506124976000830184612171565b92915050565b60006040820190506124b26000830185612171565b6124bf6020830184612415565b9392505050565b60006020820190506124db6000830184612180565b92915050565b60006020820190506124f6600083018461218f565b92915050565b60006020820190508181036000830152612516818461219e565b905092915050565b6000602082019050818103600083015261253781612208565b9050919050565b600060208201905081810360008301526125578161222b565b9050919050565b600060208201905081810360008301526125778161224e565b9050919050565b6000602082019050818103600083015261259781612271565b9050919050565b600060208201905081810360008301526125b781612294565b9050919050565b600060208201905081810360008301526125d7816122b7565b9050919050565b600060208201905081810360008301526125f7816122da565b9050919050565b60006020820190508181036000830152612617816122fd565b9050919050565b6000602082019050818103600083015261263781612320565b9050919050565b6000602082019050818103600083015261265781612366565b9050919050565b60006020820190508181036000830152612677816123ac565b9050919050565b60006020820190508181036000830152612697816123f2565b9050919050565b60006020820190506126b36000830184612415565b92915050565b60006020820190506126ce6000830184612424565b92915050565b600081519050919050565b600081905092915050565b600082825260208201905092915050565b600081905092915050565b60006127118261288f565b915061271c8361288f565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156127515761275061297e565b5b828201905092915050565b60006127678261288f565b91506127728361288f565b925082612782576127816129ad565b5b828204905092915050565b60006127988261288f565b91506127a38361288f565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156127dc576127db61297e565b5b828202905092915050565b60006127f28261288f565b91506127fd8361288f565b9250828210156128105761280f61297e565b5b828203905092915050565b60006128268261286f565b9050919050565b60008115159050919050565b6000819050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060ff82169050919050565b60005b838110156128c45780820151818401526020810190506128a9565b838111156128d3576000848401525b50505050565b60006128e48261288f565b915060008214156128f8576128f761297e565b5b600182039050919050565b6000600282049050600182168061291b57607f821691505b6020821081141561292f5761292e6129dc565b5b50919050565b60006129408261288f565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156129735761297261297e565b5b600182019050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b6000601f19601f8301169050919050565b7f537472696e67733a20686578206c656e67746820696e73756666696369656e74600082015250565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b7f506c656173652073657420436f6e74726f6c6c65722041646472657373212100600082015250565b7f4572726f723a20416c7265616479205374617274656421000000000000000000600082015250565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a20696e73756666696369656e7420616c6c6f77616e6365000000600082015250565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b7f4572726f723a204d696e7461626c65206e6f7420617661696c61626c65210000600082015250565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b50565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f416363657373436f6e74726f6c3a206163636f756e7420000000000000000000600082015250565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b7f206973206d697373696e6720726f6c6520000000000000000000000000000000600082015250565b7f416363657373436f6e74726f6c3a2063616e206f6e6c792072656e6f756e636560008201527f20726f6c657320666f722073656c660000000000000000000000000000000000602082015250565b612dd38161281b565b8114612dde57600080fd5b50565b612dea8161282d565b8114612df557600080fd5b50565b612e0181612839565b8114612e0c57600080fd5b50565b612e1881612843565b8114612e2357600080fd5b50565b612e2f8161288f565b8114612e3a57600080fd5b5056fea2646970667358221220509c2a861ba3ce3a76ede53f80e83caa97d741b48c12bbc1843129d33fa87f5b64736f6c63430008070033
Verified Source Code Full Match
Compiler: v0.8.7+commit.e28d00a7
EVM: london
Optimization: No
Mineable.sol 453 lines
// SPDX-License-Identifier: MIT
/*
$$\ $$\ $$\ $$\ $$\
$$$\ $$$ |\__| $$ | $$ |
$$$$\ $$$$ |$$\ $$$$$$$\ $$$$$$\ $$$$$$\ $$$$$$$\ $$ | $$$$$$\
$$\$$\$$ $$ |$$ |$$ __$$\ $$ __$$\ \____$$\ $$ __$$\ $$ |$$ __$$\
$$ \$$$ $$ |$$ |$$ | $$ |$$$$$$$$ | $$$$$$$ |$$ | $$ |$$ |$$$$$$$$ |
$$ |\$ /$$ |$$ |$$ | $$ |$$ ____|$$ __$$ |$$ | $$ |$$ |$$ ____|
$$ | \_/ $$ |$$ |$$ | $$ |\$$$$$$$\ \$$$$$$$ |$$$$$$$ |$$ |\$$$$$$$\
\__| \__|\__|\__| \__| \_______| \_______|\_______/ \__| \_______|
*/
pragma solidity ^0.8.0;
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 balanceOf(address account) external view returns (uint256);
function transfer(address to, uint256 amount) external returns (bool);
function allowance(address owner, address spender) external view returns (uint256);
function approve(address spender, uint256 amount) external returns (bool);
function transferFrom(
address from,
address to,
uint256 amount
) external returns (bool);
}
interface IERC165 {
function supportsInterface(bytes4 interfaceId) external view returns (bool);
}
abstract contract ERC165 is IERC165 {
function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) {
return interfaceId == type(IERC165).interfaceId;
}
}
library Strings {
bytes16 private constant _HEX_SYMBOLS = "0123456789abcdef";
uint8 private constant _ADDRESS_LENGTH = 20;
function toString(uint256 value) internal pure returns (string memory) {
if (value == 0) {
return "0";
}
uint256 temp = value;
uint256 digits;
while (temp != 0) {
digits++;
temp /= 10;
}
bytes memory buffer = new bytes(digits);
while (value != 0) {
digits -= 1;
buffer[digits] = bytes1(uint8(48 + uint256(value % 10)));
value /= 10;
}
return string(buffer);
}
function toHexString(uint256 value) internal pure returns (string memory) {
if (value == 0) {
return "0x00";
}
uint256 temp = value;
uint256 length = 0;
while (temp != 0) {
length++;
temp >>= 8;
}
return toHexString(value, length);
}
function toHexString(uint256 value, uint256 length) internal pure returns (string memory) {
bytes memory buffer = new bytes(2 * length + 2);
buffer[0] = "0";
buffer[1] = "x";
for (uint256 i = 2 * length + 1; i > 1; --i) {
buffer[i] = _HEX_SYMBOLS[value & 0xf];
value >>= 4;
}
require(value == 0, "Strings: hex length insufficient");
return string(buffer);
}
function toHexString(address addr) internal pure returns (string memory) {
return toHexString(uint256(uint160(addr)), _ADDRESS_LENGTH);
}
}
abstract contract Context {
function _msgSender() internal view virtual returns (address) {
return msg.sender;
}
function _msgData() internal view virtual returns (bytes calldata) {
return msg.data;
}
}
interface IAccessControl {
event RoleAdminChanged(bytes32 indexed role, bytes32 indexed previousAdminRole, bytes32 indexed newAdminRole);
event RoleGranted(bytes32 indexed role, address indexed account, address indexed sender);
event RoleRevoked(bytes32 indexed role, address indexed account, address indexed sender);
function hasRole(bytes32 role, address account) external view returns (bool);
function getRoleAdmin(bytes32 role) external view returns (bytes32);
function grantRole(bytes32 role, address account) external;
function revokeRole(bytes32 role, address account) external;
function renounceRole(bytes32 role, address account) external;
}
abstract contract AccessControl is Context, IAccessControl, ERC165 {
struct RoleData {
mapping(address => bool) members;
bytes32 adminRole;
}
mapping(bytes32 => RoleData) private _roles;
bytes32 public constant DEFAULT_ADMIN_ROLE = 0x00;
modifier onlyRole(bytes32 role) {
_checkRole(role);
_;
}
function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) {
return interfaceId == type(IAccessControl).interfaceId || super.supportsInterface(interfaceId);
}
function hasRole(bytes32 role, address account) public view virtual override returns (bool) {
return _roles[role].members[account];
}
function _checkRole(bytes32 role) internal view virtual {
_checkRole(role, _msgSender());
}
function _checkRole(bytes32 role, address account) internal view virtual {
if (!hasRole(role, account)) {
revert(
string(
abi.encodePacked(
"AccessControl: account ",
Strings.toHexString(uint160(account), 20),
" is missing role ",
Strings.toHexString(uint256(role), 32)
)
)
);
}
}
function getRoleAdmin(bytes32 role) public view virtual override returns (bytes32) {
return _roles[role].adminRole;
}
function grantRole(bytes32 role, address account) public virtual override onlyRole(getRoleAdmin(role)) {
_grantRole(role, account);
}
function revokeRole(bytes32 role, address account) public virtual override onlyRole(getRoleAdmin(role)) {
_revokeRole(role, account);
}
function renounceRole(bytes32 role, address account) public virtual override {
require(account == _msgSender(), "AccessControl: can only renounce roles for self");
_revokeRole(role, account);
}
function _setupRole(bytes32 role, address account) internal virtual {
_grantRole(role, account);
}
function _setRoleAdmin(bytes32 role, bytes32 adminRole) internal virtual {
bytes32 previousAdminRole = getRoleAdmin(role);
_roles[role].adminRole = adminRole;
emit RoleAdminChanged(role, previousAdminRole, adminRole);
}
function _grantRole(bytes32 role, address account) internal virtual {
if (!hasRole(role, account)) {
_roles[role].members[account] = true;
emit RoleGranted(role, account, _msgSender());
}
}
function _revokeRole(bytes32 role, address account) internal virtual {
if (hasRole(role, account)) {
_roles[role].members[account] = false;
emit RoleRevoked(role, account, _msgSender());
}
}
}
contract Mineable is AccessControl {
bytes32 public constant MINTER_ROLE = keccak256("MINTER_ROLE");
string private _name = "Mineable";
string private _symbol = "$MNB";
uint8 private _decimals = 18;
uint public Mined;
uint public miningStartAt;
uint private frequency = 10 minutes;
uint private fd = 52560;
uint private sr = 10000 * 10 ** _decimals;
uint private ddr = 210082;
uint private elreward = 10 * 10 ** _decimals;
uint private deflationRate = 75;
uint private denominator = 100;
uint public startSupply = 250_000_000 * 10 ** _decimals;
uint public maxMineableSupply = 1_250_000_000 * 10 ** _decimals;
uint private _totalSupply;
address public minterController = address(0x0E0754c25261BB320Dd27835b703b73ED2a53c59);
address DEAD = 0x000000000000000000000000000000000000dEaD;
address ZERO = 0x0000000000000000000000000000000000000000;
mapping(address => uint) private _balances;
mapping(address => mapping(address => uint)) private _allowances;
event Transfer(address indexed from, address indexed to, uint value);
event Approval(address indexed owner, address indexed spender, uint value);
constructor(){
_grantRole(DEFAULT_ADMIN_ROLE, msg.sender);
_grantRole(MINTER_ROLE, minterController);
_totalSupply = startSupply;
_balances[msg.sender] = _totalSupply; //starting token
emit Transfer(address(0), msg.sender, _totalSupply);
}
function transfer(address to, uint256 amount) public returns (bool) {
address owner = msg.sender;
_transfer(owner, to, amount);
return true;
}
function transferFrom(
address from,
address to,
uint256 amount
) public returns (bool) {
address spender = msg.sender;
_spendAllowance(from, spender, amount);
_transfer(from, to, amount);
return true;
}
function approve(address spender, uint256 amount) public returns (bool) {
address owner = msg.sender;
_approve(owner, spender, amount);
return true;
}
function increaseAllowance(address spender, uint256 addedValue) public returns (bool) {
address owner = msg.sender;
_approve(owner, spender, allowance(owner, spender) + addedValue);
return true;
}
function decreaseAllowance(address spender, uint256 subtractedValue) public returns (bool) {
address owner = msg.sender;
uint256 currentAllowance = allowance(owner, spender);
require(currentAllowance >= subtractedValue, "ERC20: decreased allowance below zero");
unchecked {
_approve(owner, spender, currentAllowance - subtractedValue);
}
return true;
}
function _transfer(
address from,
address to,
uint256 amount
) internal {
require(from != address(0), "ERC20: transfer from the zero address");
require(to != address(0), "ERC20: transfer to the zero address");
uint256 fromBalance = _balances[from];
require(fromBalance >= amount, "ERC20: transfer amount exceeds balance");
_balances[from] = fromBalance - amount;
_balances[to] += amount;
emit Transfer(from, to, amount);
}
function _approve(
address owner,
address spender,
uint256 amount
) internal {
require(owner != address(0), "ERC20: approve from the zero address");
require(spender != address(0), "ERC20: approve to the zero address");
_allowances[owner][spender] = amount;
emit Approval(owner, spender, amount);
}
function _spendAllowance(
address owner,
address spender,
uint256 amount
) internal {
uint256 currentAllowance = allowance(owner, spender);
if (currentAllowance != type(uint256).max) {
require(currentAllowance >= amount, "ERC20: insufficient allowance");
unchecked {
_approve(owner, spender, currentAllowance - amount);
}
}
}
function allowance(address owner, address spender) public view returns (uint256) {
return _allowances[owner][spender];
}
function name() public view returns (string memory) {
return _name;
}
function symbol() public view returns (string memory) {
return _symbol;
}
function decimals() public view returns (uint8) {
return _decimals;
}
function totalSupply() public view returns (uint256) {
return _totalSupply;
}
function balanceOf(address account) public view returns (uint256) {
return _balances[account];
}
function totalCirculationSupply() public view returns (uint256) {
return _totalSupply - _balances[DEAD] - _balances[ZERO];
}
// ------------ Deflation -------------------
function startMining() external onlyRole(MINTER_ROLE) {
require(miningStartAt == 0,"Error: Already Started!");
miningStartAt = block.timestamp;
}
function triggerMint() external onlyRole(MINTER_ROLE) {
require(minterController != address(0),"Please set Controller Address!!");
uint mintable = getTriggerInfo();
if(mintable == 0) {
revert("Error: Mintable not available!");
}
Mined += mintable;
_totalSupply += mintable;
_balances[minterController] += mintable;
emit Transfer(address(0), minterController, mintable);
}
function getTriggerInfo() public view returns (uint mintable) {
uint getBlock = getBlocks();
uint adder = fd;
uint subber = 0;
uint blockdelta = fd;
uint rewarddelta = sr;
uint lemda = 0;
if(getBlock > fd) {
lemda = fd * sr;
for(uint i = 0; i < 25; i++) {
uint tblock = blockdelta*deflationRate/denominator;
uint tReward = rewarddelta*deflationRate/denominator;
adder = adder + tblock;
subber = subber + blockdelta;
// Eve = i + 1;
if(getBlock > adder) {
lemda += tblock*tReward;
blockdelta = tblock;
rewarddelta = tReward;
}
else {
uint wr = getBlock - subber;
lemda += wr * tReward;
break;
}
}
}
else {
lemda = getBlock * sr;
}
if(getBlock > ddr) {
uint elst = getBlock - ddr;
uint tobe = elst * elreward;
lemda += tobe;
}
return lemda > maxMineableSupply ? maxMineableSupply - Mined : lemda - Mined; //limit max supply
}
function elapsedTime() public view returns (uint) {
return miningStartAt > 0 ? block.timestamp - miningStartAt : 0;
}
function getBlocks() public view returns (uint) {
uint getSec = elapsedTime();
uint getBlock = getSec / frequency;
return getBlock;
}
function getTime() public view returns (uint) {
return block.timestamp;
}
function setController(address _newAdr) external onlyRole(DEFAULT_ADMIN_ROLE) {
minterController = _newAdr;
}
function rescueFunds() external onlyRole(DEFAULT_ADMIN_ROLE) {
(bool os,) = payable(msg.sender).call{value: address(this).balance}("");
require(os);
}
function rescueTokens(address _token) external onlyRole(DEFAULT_ADMIN_ROLE) {
uint balance = IERC20(_token).balanceOf(address(this));
IERC20(_token).transfer(msg.sender,balance);
}
receive() payable external {}
}
Read Contract
DEFAULT_ADMIN_ROLE 0xa217fddf → bytes32
MINTER_ROLE 0xd5391393 → bytes32
Mined 0x63c60f81 → uint256
allowance 0xdd62ed3e → uint256
balanceOf 0x70a08231 → uint256
decimals 0x313ce567 → uint8
elapsedTime 0x51453f9d → uint256
getBlocks 0x4f5b7dc2 → uint256
getRoleAdmin 0x248a9ca3 → bytes32
getTime 0x557ed1ba → uint256
getTriggerInfo 0x36cbcee4 → uint256
hasRole 0x91d14854 → bool
maxMineableSupply 0xcc46997a → uint256
miningStartAt 0x4f848312 → uint256
minterController 0xa2d6b3c5 → address
name 0x06fdde03 → string
startSupply 0xab6e7b4a → uint256
supportsInterface 0x01ffc9a7 → bool
symbol 0x95d89b41 → string
totalCirculationSupply 0x18c76b24 → uint256
totalSupply 0x18160ddd → uint256
Write Contract 13 functions
These functions modify contract state and require a wallet transaction to execute.
approve 0x095ea7b3
address spender
uint256 amount
returns: bool
decreaseAllowance 0xa457c2d7
address spender
uint256 subtractedValue
returns: bool
grantRole 0x2f2ff15d
bytes32 role
address account
increaseAllowance 0x39509351
address spender
uint256 addedValue
returns: bool
renounceRole 0x36568abe
bytes32 role
address account
rescueFunds 0xe6b2603b
No parameters
rescueTokens 0x00ae3bf8
address _token
revokeRole 0xd547741f
bytes32 role
address account
setController 0x92eefe9b
address _newAdr
startMining 0x21b79d98
No parameters
transfer 0xa9059cbb
address to
uint256 amount
returns: bool
transferFrom 0x23b872dd
address from
address to
uint256 amount
returns: bool
triggerMint 0x1311c293
No parameters
Recent Transactions
No transactions found for this address