Address Contract Partially Verified
Address
0x78750ec32b4e46FD9512336abD3cb2E4127C29f3
Balance
0 ETH
Nonce
1
Code Size
14232 bytes
Creator
0xa92F3598...ba91 at tx 0xa89077fa...b8ed17
Indexed Transactions
0 (1 on-chain, <1% indexed)
Contract Bytecode
14232 bytes
0x608060405260043610610174576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff1680622b5c0a146101e557806311a3311c146102225780631c019a521461025f578063365655f01461029c5780633a4b4532146102c55780633e8cc273146102f057806347f849cd146103075780634d7f917f14610348578063539a67bf14610371578063650db56d1461039a578063666a7370146103c357806371ea29df1461040057806379883bba1461042b57806393002f021461045457806398c7aba21461047f57806399f57e05146104bc5780639aaa38a6146104d3578063a6f9dae1146104fc578063b2a3fd0514610525578063bbe316be1461054e578063cfe7de071461057b578063d3a516d3146105a4578063d64ee8d2146105cf578063d9d61a10146105e6578063d9df23c014610623578063da546cb21461064c578063e2afe3bb14610677578063e61021e8146106a2578063f6d0bf2f146106cb575b60003411151561018357600080fd5b6101b6600b60008073ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054346106f6565b600b60008073ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550005b3480156101f157600080fd5b5061020c600480360361020791908101906130a7565b610712565b60405161021991906134d1565b60405180910390f35b34801561022e57600080fd5b50610249600480360361024491908101906130d0565b6107c2565b6040516102569190613553565b60405180910390f35b34801561026b57600080fd5b50610286600480360361028191908101906131e0565b6107f2565b60405161029391906133ef565b60405180910390f35b3480156102a857600080fd5b506102c360048036036102be91908101906131e0565b610830565b005b3480156102d157600080fd5b506102da6108a5565b6040516102e79190613553565b60405180910390f35b3480156102fc57600080fd5b506103056108ab565b005b34801561031357600080fd5b5061032e600480360361032991908101906131e0565b610969565b60405161033f95949392919061356e565b60405180910390f35b34801561035457600080fd5b5061036f600480360361036a91908101906130d0565b6109f4565b005b34801561037d57600080fd5b50610398600480360361039391908101906130a7565b610aad565b005b3480156103a657600080fd5b506103c160048036036103bc919081019061310c565b610d47565b005b3480156103cf57600080fd5b506103ea60048036036103e591908101906130a7565b6110a4565b6040516103f79190613553565b60405180910390f35b34801561040c57600080fd5b506104156110bc565b60405161042291906134b6565b60405180910390f35b34801561043757600080fd5b50610452600480360361044d91908101906131e0565b6110cf565b005b34801561046057600080fd5b50610469611149565b6040516104769190613553565b60405180910390f35b34801561048b57600080fd5b506104a660048036036104a191908101906130a7565b61114f565b6040516104b39190613553565b60405180910390f35b3480156104c857600080fd5b506104d1611271565b005b3480156104df57600080fd5b506104fa60048036036104f591908101906131e0565b6115b8565b005b34801561050857600080fd5b50610523600480360361051e91908101906130a7565b61162d565b005b34801561053157600080fd5b5061054c600480360361054791908101906131e0565b61177f565b005b34801561055a57600080fd5b50610563611859565b6040516105729392919061346a565b60405180910390f35b34801561058757600080fd5b506105a2600480360361059d91908101906130d0565b611b2a565b005b3480156105b057600080fd5b506105b9611bc9565b6040516105c691906133ef565b60405180910390f35b3480156105db57600080fd5b506105e4611bf2565b005b3480156105f257600080fd5b5061060d600480360361060891908101906130a7565b611caf565b60405161061a9190613553565b60405180910390f35b34801561062f57600080fd5b5061064a6004803603610645919081019061315e565b611cfb565b005b34801561065857600080fd5b50610661611da0565b60405161066e9190613553565b60405180910390f35b34801561068357600080fd5b5061068c611da6565b6040516106999190613553565b60405180910390f35b3480156106ae57600080fd5b506106c960048036036106c491908101906130d0565b611dac565b005b3480156106d757600080fd5b506106e06122c5565b6040516106ed9190613553565b60405180910390f35b6000818301905082811015151561070957fe5b80905092915050565b60026020528060005260406000206000915090508054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156107ba5780601f1061078f576101008083540402835291602001916107ba565b820191906000526020600020905b81548152906001019060200180831161079d57829003601f168201915b505050505081565b6005602052816000526040600020818154811015156107dd57fe5b90600052602060002001600091509150505481565b600c8181548110151561080157fe5b906000526020600020016000915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614151561088b57600080fd5b6004548111151561089b57600080fd5b8060048190555050565b600a5481565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614151561090657600080fd5b6001600060146101000a81548160ff0219169083151502179055507fadac2a07dd926cc50f681194fe221f6245cdafa96623d1c64fa69c027182f40a600060149054906101000a900460ff1660405161095f91906134b6565b60405180910390a1565b60008060008060008060066000888152602001908152602001600020905080600001548160030160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff168260040160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1683600101548460020154955095509550955095505091939590929450565b6000808373ffffffffffffffffffffffffffffffffffffffff1614151515610a1b57600080fd5b60008214151515610a2b57600080fd5b6006600083815260200190815260200160002090503373ffffffffffffffffffffffffffffffffffffffff168160030160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16141515610a9e57600080fd5b610aa883836122e4565b505050565b6000806000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515610b0b57600080fd5b6000600b60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054111515610b5957600080fd5b600b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205491506000600b60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550829050818173ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401610c3991906133ef565b602060405180830381600087803b158015610c5357600080fd5b505af1158015610c67573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250610c8b9190810190613209565b10151515610c9857600080fd5b8073ffffffffffffffffffffffffffffffffffffffff1663a9059cbb33846040518363ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401610cef929190613441565b602060405180830381600087803b158015610d0957600080fd5b505af1158015610d1d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250610d419190810190613135565b50505050565b60008060008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515610da757600080fd5b600191505b600754821015611067576006600083815260200190815260200160002090506000816000015414151561105a57838015610e575750600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168160040160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16145b80610e60575083155b1561105957610ebc8160030160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff168260040160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff168360010154612828565b61103d8160c060405190810160405290816000820154815260200160018201548152602001600282015481526020016003820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016004820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001600582018054600181600116156101000203166002900480601f01602080910402602001604051908101604052809291908181526020018280546001816001161561010002031660029004801561102f5780601f106110045761010080835404028352916020019161102f565b820191906000526020600020905b81548152906001019060200180831161101257829003601f168201915b505050505081525050612992565b6008600081548092919060019003919050555082806001019350505b5b8180600101925050610dac565b7faeb4f5733a2e8073f7ddf9b69cdc1588e959cec9ac8b80866c29237cbe281fbe836040516110969190613553565b60405180910390a150505050565b60096020528060005260406000206000915090505481565b600060149054906101000a900460ff1681565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614151561112a57600080fd5b603c811015151561113a57600080fd5b62015180810260038190555050565b60085481565b6000806000808473ffffffffffffffffffffffffffffffffffffffff161415151561117957600080fd5b600191505b600754821015611267576006600083815260200190815260200160002090503373ffffffffffffffffffffffffffffffffffffffff168160030160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614801561124b57508373ffffffffffffffffffffffffffffffffffffffff168160040160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16145b1561125a578060010154830192505b818060010192505061117e565b8292505050919050565b6000806000806000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415156112d257600080fd5b600b60008073ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054935060008411801561132557503073ffffffffffffffffffffffffffffffffffffffff16318411155b156113ca576000600b60008073ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055503373ffffffffffffffffffffffffffffffffffffffff166108fc600b60008073ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549081150290604051600060405180830381858888f193505050501580156113c8573d6000803e3d6000fd5b505b600090505b600c805490508110156115a257600c818154811015156113eb57fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1692506000600b60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054111561159557600b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205493506000600b60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508291508173ffffffffffffffffffffffffffffffffffffffff1663a9059cbb33866040518363ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401611541929190613441565b602060405180830381600087803b15801561155b57600080fd5b505af115801561156f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506115939190810190613135565b505b80806001019150506113cf565b6000600c816115b19190612dd2565b5050505050565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614151561161357600080fd5b601e811115151561162357600080fd5b80600a8190555050565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614151561168857600080fd5b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141515156116e457600080fd5b806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507f178eb36323c5a89970cc900b55d89d2731becfb4f5df34667d995e48cee7d4e16000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660405161177491906133ef565b60405180910390a150565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415156117da57600080fd5b6000811115156117e957600080fd5b803073ffffffffffffffffffffffffffffffffffffffff16311015151561180f57600080fd5b3373ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015611855573d6000803e3d6000fd5b5050565b6060806060600060608060606000806000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415156118c357600080fd5b600c805490509550856040519080825280602002602001820160405280156118fa5781602001602082028038833980820191505090505b5094508560405190808252806020026020018201604052801561193157816020015b606081526020019060019003908161191c5790505b509350856040519080825280602002602001820160405280156119635781602001602082028038833980820191505090505b509250600091505b85821015611b1657600c8281548110151561198257fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1685838151811015156119bb57fe5b9060200190602002019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250508482815181101515611a0557fe5b9060200190602002015190508073ffffffffffffffffffffffffffffffffffffffff166395d89b416040518163ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401600060405180830381600087803b158015611a7557600080fd5b505af1158015611a89573d6000803e3d6000fd5b505050506040513d6000823e3d601f19601f82011682018060405250611ab2919081019061319f565b8483815181101515611ac057fe5b90602001906020020181905250611aed8583815181101515611ade57fe5b90602001906020020151612b9d565b8383815181101515611afb57fe5b9060200190602002018181525050818060010192505061196b565b848484985098509850505050505050909192565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515611b8557600080fd5b60008273ffffffffffffffffffffffffffffffffffffffff1614151515611bab57600080fd5b60008114151515611bbb57600080fd5b611bc582826122e4565b5050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515611c4d57600080fd5b60008060146101000a81548160ff0219169083151502179055507fadac2a07dd926cc50f681194fe221f6245cdafa96623d1c64fa69c027182f40a600060149054906101000a900460ff16604051611ca591906134b6565b60405180910390a1565b6000600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020805490509050919050565b80600260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000209080519060200190611d4e929190612dfe565b503373ffffffffffffffffffffffffffffffffffffffff167fc5db26e7b4622de13dc720324df17737b30e33a473a12bfa5120461e3692276982604051611d9591906134f3565b60405180910390a250565b60045481565b60035481565b60008060149054906101000a900460ff16151515611dc957600080fd5b60008373ffffffffffffffffffffffffffffffffffffffff1614151515611def57600080fd5b600082111515611dfe57600080fd5b8290508073ffffffffffffffffffffffffffffffffffffffff166323b872dd3330856040518463ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401611e5a9392919061340a565b602060405180830381600087803b158015611e7457600080fd5b505af1158015611e88573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250611eac9190810190613135565b1515611eb757600080fd5b600560003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600754908060018154018082558091505090600182039060005260206000200160009091929091909150555060c0604051908101604052806007548152602001838152602001600354420181526020013373ffffffffffffffffffffffffffffffffffffffff1681526020018473ffffffffffffffffffffffffffffffffffffffff1681526020018273ffffffffffffffffffffffffffffffffffffffff166395d89b416040518163ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401600060405180830381600087803b158015611fe257600080fd5b505af1158015611ff6573d6000803e3d6000fd5b505050506040513d6000823e3d601f19601f8201168201806040525061201f919081019061319f565b81525060066000600754815260200190815260200160002060008201518160000155602082015181600101556040820151816002015560608201518160030160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060808201518160040160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060a08201518160050190805190602001906120ff929190612e7e565b5090505061214c600960008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054836106f6565b600960008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506007600081548092919060010191905055506008600081548092919060010191905055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167fed175a8ddea84085fa2767c9c1f3342fae1f118bc1213ac4d4a0c6277bc0ad738373ffffffffffffffffffffffffffffffffffffffff166395d89b416040518163ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401600060405180830381600087803b15801561226657600080fd5b505af115801561227a573d6000803e3d6000fd5b505050506040513d6000823e3d601f19601f820116820180604052506122a3919081019061319f565b8560035442016040516122b893929190613515565b60405180910390a3505050565b60003073ffffffffffffffffffffffffffffffffffffffff1631905090565b60008060006060600080600660008881526020019081526020016000209550600086600001541415151561231757600080fd5b8773ffffffffffffffffffffffffffffffffffffffff168660040160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614151561237557600080fd5b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff161480156123d55750428660020154105b8061242e5750600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff1614155b151561243957600080fd5b8560040160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169350856005018054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156124f85780601f106124cd576101008083540402835291602001916124f8565b820191906000526020600020905b8154815290600101906020018083116124db57829003601f168201915b50505050509250428660020154101561256e576125628660030160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff168760040160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff168860010154612828565b85600101549450612621565b60646125808760010154600a54612be6565b81151561258957fe5b04915061259a866001015483612c1e565b90506125ef8660030160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff168760040160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1683612828565b61261d8660040160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1683612c37565b8094505b6127a28660c060405190810160405290816000820154815260200160018201548152602001600282015481526020016003820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016004820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001600582018054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156127945780601f1061276957610100808354040283529160200191612794565b820191906000526020600020905b81548152906001019060200180831161277757829003601f168201915b505050505081525050612992565b600860008154809291906001900391905055508373ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f959346e7719e944c33f76798af64519a9c17a870c805ae49c011066f18fa9cb085884260405161281693929190613515565b60405180910390a35050505050505050565b6000829050818173ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff167c010000000000000000000000000000000000000000000000000000000002815260040161288391906133ef565b602060405180830381600087803b15801561289d57600080fd5b505af11580156128b1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506128d59190810190613209565b101515156128e257600080fd5b8073ffffffffffffffffffffffffffffffffffffffff1663a9059cbb85846040518363ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401612939929190613441565b602060405180830381600087803b15801561295357600080fd5b505af1158015612967573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525061298b9190810190613135565b5050505050565b60008060006129e860096000866080015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020548560200151612c1e565b60096000866080015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506006600085600001518152602001908152602001600020600080820160009055600182016000905560028201600090556003820160006101000a81549073ffffffffffffffffffffffffffffffffffffffff02191690556004820160006101000a81549073ffffffffffffffffffffffffffffffffffffffff0219169055600582016000612abd9190612efe565b5050600560003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020925082805490509150600090505b81811015612b975783600001518382815481101515612b2757fe5b90600052602060002001541415612b8a578260018303815481101515612b4957fe5b90600052602060002001548382815481101515612b6257fe5b906000526020600020018190555082805480919060019003612b849190612f46565b50612b97565b8080600101915050612b0c565b50505050565b6000600b60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b600080831415612bf95760009050612c18565b8183029050818382811515612c0a57fe5b04141515612c1457fe5b8090505b92915050565b6000828211151515612c2c57fe5b818303905092915050565b600080612c83600b60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054846106f6565b600b60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555060019150600090505b600c80549050811015612d5f578373ffffffffffffffffffffffffffffffffffffffff16600c82815481101515612d0257fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415612d525760009150612d5f565b8080600101915050612ccf565b8115612dcc57600c8490806001815401808255809150509060018203906000526020600020016000909192909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550505b50505050565b815481835581811115612df957818360005260206000209182019101612df89190612f72565b5b505050565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f10612e3f57805160ff1916838001178555612e6d565b82800160010185558215612e6d579182015b82811115612e6c578251825591602001919060010190612e51565b5b509050612e7a9190612f72565b5090565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f10612ebf57805160ff1916838001178555612eed565b82800160010185558215612eed579182015b82811115612eec578251825591602001919060010190612ed1565b5b509050612efa9190612f72565b5090565b50805460018160011615610100020316600290046000825580601f10612f245750612f43565b601f016020900490600052602060002090810190612f429190612f72565b5b50565b815481835581811115612f6d57818360005260206000209182019101612f6c9190612f72565b5b505050565b612f9491905b80821115612f90576000816000905550600101612f78565b5090565b90565b6000612fa382356136d5565b905092915050565b6000612fb782356136f5565b905092915050565b6000612fcb82516136f5565b905092915050565b600082601f8301121515612fe657600080fd5b8135612ff9612ff4826135ee565b6135c1565b9150808252602083016020830185838301111561301557600080fd5b61302083828461370b565b50505092915050565b600082601f830112151561303c57600080fd5b815161304f61304a826135ee565b6135c1565b9150808252602083016020830185838301111561306b57600080fd5b61307683828461371a565b50505092915050565b600061308b8235613701565b905092915050565b600061309f8251613701565b905092915050565b6000602082840312156130b957600080fd5b60006130c784828501612f97565b91505092915050565b600080604083850312156130e357600080fd5b60006130f185828601612f97565b92505060206131028582860161307f565b9150509250929050565b60006020828403121561311e57600080fd5b600061312c84828501612fab565b91505092915050565b60006020828403121561314757600080fd5b600061315584828501612fbf565b91505092915050565b60006020828403121561317057600080fd5b600082013567ffffffffffffffff81111561318a57600080fd5b61319684828501612fd3565b91505092915050565b6000602082840312156131b157600080fd5b600082015167ffffffffffffffff8111156131cb57600080fd5b6131d784828501613029565b91505092915050565b6000602082840312156131f257600080fd5b60006132008482850161307f565b91505092915050565b60006020828403121561321b57600080fd5b600061322984828501613093565b91505092915050565b61323b8161369f565b82525050565b600061324c82613641565b80845260208401935061325e8361361a565b60005b8281101561329057613274868351613232565b61327d82613678565b9150602086019550600181019050613261565b50849250505092915050565b60006132a78261364c565b808452602084019350836020820285016132c085613627565b60005b848110156132f95783830388526132db8383516133aa565b92506132e682613685565b91506020880197506001810190506132c3565b508196508694505050505092915050565b600061331582613657565b80845260208401935061332783613634565b60005b828110156133595761333d8683516133e0565b61334682613692565b915060208601955060018101905061332a565b50849250505092915050565b61336e816136bf565b82525050565b600061337f8261366d565b80845261339381602086016020860161371a565b61339c8161374d565b602085010191505092915050565b60006133b582613662565b8084526133c981602086016020860161371a565b6133d28161374d565b602085010191505092915050565b6133e9816136cb565b82525050565b60006020820190506134046000830184613232565b92915050565b600060608201905061341f6000830186613232565b61342c6020830185613232565b61343960408301846133e0565b949350505050565b60006040820190506134566000830185613232565b61346360208301846133e0565b9392505050565b600060608201905081810360008301526134848186613241565b90508181036020830152613498818561329c565b905081810360408301526134ac818461330a565b9050949350505050565b60006020820190506134cb6000830184613365565b92915050565b600060208201905081810360008301526134eb81846133aa565b905092915050565b6000602082019050818103600083015261350d8184613374565b905092915050565b6000606082019050818103600083015261352f8186613374565b905061353e60208301856133e0565b61354b60408301846133e0565b949350505050565b600060208201905061356860008301846133e0565b92915050565b600060a08201905061358360008301886133e0565b6135906020830187613232565b61359d6040830186613232565b6135aa60608301856133e0565b6135b760808301846133e0565b9695505050505050565b6000604051905081810181811067ffffffffffffffff821117156135e457600080fd5b8060405250919050565b600067ffffffffffffffff82111561360557600080fd5b601f19601f8301169050602081019050919050565b6000602082019050919050565b6000602082019050919050565b6000602082019050919050565b600081519050919050565b600081519050919050565b600081519050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b6000602082019050919050565b6000602082019050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60008115159050919050565b6000819050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60008115159050919050565b6000819050919050565b82818337600083830152505050565b60005b8381101561373857808201518184015260208101905061371d565b83811115613747576000848401525b50505050565b6000601f19601f83011690509190505600a265627a7a72305820deebdb2a875421e5f4105c0ebbff7199a583451a3fa8ff69d76a5a4af11445de6c6578706572696d656e74616cf50037
Verified Source Code Partial Match
Compiler: v0.4.25+commit.59dbf8f1
EVM: byzantium
Optimization: No
ERC20tokensHodl.sol 548 lines
pragma solidity ^0.4.25;
pragma experimental ABIEncoderV2;
/**
*
* AXPR ERC20 Tokens Hodling
*
* Copyright: © All Rights Reserved | Axpire 2019
*
* Author: Gustavo Basanta
*
*/
contract OwnableContract {
event onTransferOwnership(address newOwner);
address superOwner;
constructor() public {
superOwner = msg.sender;
}
modifier onlyOwner() {
require(msg.sender == superOwner);
_;
}
function viewSuperOwner() public view returns (address owner) {
return superOwner;
}
function changeOwner(address newOwner) onlyOwner public {
require(newOwner != superOwner);
superOwner = newOwner;
emit onTransferOwnership(superOwner);
}
}
contract BlockableContract is OwnableContract {
event onBlockHODLs(bool status);
bool public blockedContract;
constructor() public {
blockedContract = false;
}
modifier contractActive() {
require(!blockedContract);
_;
}
function doBlockContract() onlyOwner public {
blockedContract = true;
emit onBlockHODLs(blockedContract);
}
function unBlockContract() onlyOwner public {
blockedContract = false;
emit onBlockHODLs(blockedContract);
}
}
contract ERC20tokensHodl is BlockableContract {
/**
* Events
*/
event onStoreProfileHash(address indexed hodler, string profileHashed);
event onHodlTokens(address indexed hodler, address indexed tokenAddress, string tokenSymbol, uint256 amount, uint256 endtime);
event onClaimTokens(address indexed hodler, address indexed tokenAddress, string tokenSymbol, uint256 amount, uint256 endtime);
event onReturnAll(uint256 returned);
/**
* State variables
*/
address internal AXPRtoken;
mapping(address => string) public profileHashed;
uint256 public hodlingTime;
uint256 public allTimeHighPrice;
struct Safe {
uint256 id;
uint256 amount;
uint256 endtime;
address user;
address tokenAddress;
string tokenSymbol;
}
/**
* @dev safes variables
*/
mapping(address => uint256[]) public _userSafes;
mapping(uint256 => Safe) private _safes;
uint256 private _currentIndex;
uint256 public _countSafes;
mapping(address => uint256) public _totalSaved;
/**
* @dev owner variables
*/
uint256 public comission; //0..30
mapping(address => uint256) private _systemReserves;
address[] public _listedReserves;
/**
* constructor
*/
constructor() public {
AXPRtoken = 0xC39E626A04C5971D770e319760D7926502975e47;
hodlingTime = 365 days;
_currentIndex = 1;
comission = 5;
}
/**
* fallback function to receive donation in eth
*/
function () public payable {
require(msg.value > 0);
_systemReserves[0x0] = add(_systemReserves[0x0], msg.value);
}
/**
* store the profile's hash in the blockchain
*/
function storeProfileHashed(string _profileHashed) public {
profileHashed[msg.sender] = _profileHashed;
emit onStoreProfileHash(msg.sender, _profileHashed);
}
/**
* add new hodl safe (ERC20 token)
*/
function HodlTokens(address tokenAddress, uint256 amount) public contractActive {
require(tokenAddress != 0x0);
require(amount > 0);
ERC20Interface token = ERC20Interface(tokenAddress);
require(token.transferFrom(msg.sender, address(this), amount));
_userSafes[msg.sender].push(_currentIndex);
_safes[_currentIndex] = Safe(_currentIndex, amount, now + hodlingTime, msg.sender, tokenAddress, token.symbol());
_totalSaved[tokenAddress] = add(_totalSaved[tokenAddress], amount);
_currentIndex++;
_countSafes++;
emit onHodlTokens(msg.sender, tokenAddress, token.symbol(), amount, now + hodlingTime);
}
/**
* user, claim back a hodl safe
*/
function ClaimTokens(address tokenAddress, uint256 id) public {
require(tokenAddress != 0x0);
require(id != 0);
Safe storage s = _safes[id];
require(s.user == msg.sender);
RetireHodl(tokenAddress, id);
}
function RetireHodl(address tokenAddress, uint256 id) private {
Safe storage s = _safes[id];
require(s.id != 0);
require(s.tokenAddress == tokenAddress);
require(
(tokenAddress == AXPRtoken && s.endtime < now ) ||
tokenAddress != AXPRtoken
);
uint256 eventAmount;
address eventTokenAddress = s.tokenAddress;
string memory eventTokenSymbol = s.tokenSymbol;
if(s.endtime < now) // hodl complete
{
PayToken(s.user, s.tokenAddress, s.amount);
eventAmount = s.amount;
}
else // hodl still in progress (penalty fee applies), not for AXPR tokens
{
uint256 realComission = mul(s.amount, comission) / 100;
uint256 realAmount = sub(s.amount, realComission);
PayToken(s.user, s.tokenAddress, realAmount);
StoreComission(s.tokenAddress, realComission);
eventAmount = realAmount;
}
DeleteSafe(s);
_countSafes--;
emit onClaimTokens(msg.sender, eventTokenAddress, eventTokenSymbol, eventAmount, now);
}
/**
* store comission from unfinished hodl
*/
function StoreComission(address tokenAddress, uint256 amount) private {
_systemReserves[tokenAddress] = add(_systemReserves[tokenAddress], amount);
bool isNew = true;
for(uint256 i = 0; i < _listedReserves.length; i++) {
if(_listedReserves[i] == tokenAddress) {
isNew = false;
break;
}
}
if(isNew) _listedReserves.push(tokenAddress);
}
/**
* private pay token to address
*/
function PayToken(address user, address tokenAddress, uint256 amount) private {
ERC20Interface token = ERC20Interface(tokenAddress);
require(token.balanceOf(address(this)) >= amount);
token.transfer(user, amount);
}
/**
* delete safe values in storage
*/
function DeleteSafe(Safe s) private {
_totalSaved[s.tokenAddress] = sub(_totalSaved[s.tokenAddress], s.amount);
delete _safes[s.id];
uint256[] storage vector = _userSafes[msg.sender];
uint256 size = vector.length;
for(uint256 i = 0; i < size; i++) {
if(vector[i] == s.id) {
vector[i] = vector[size-1];
vector.length--;
break;
}
}
}
/**
* Get user's any token balance
*/
function GetHodlTokensBalance(address tokenAddress) public view returns (uint256 balance) {
require(tokenAddress != 0x0);
for(uint256 i = 1; i < _currentIndex; i++) {
Safe storage s = _safes[i];
if(s.user == msg.sender && s.tokenAddress == tokenAddress)
balance += s.amount;
}
return balance;
}
/**
* Get how many safes has the user
*/
function GetUserSafesLength(address hodler) public view returns (uint256 length) {
return _userSafes[hodler].length;
}
/**
* Get safes values
*/
function GetSafe(uint256 _id) public view
returns (uint256 id, address user, address tokenAddress, uint256 amount, uint256 time)
{
Safe storage s = _safes[_id];
return(s.id, s.user, s.tokenAddress, s.amount, s.endtime);
}
/**
* Get tokens reserved for the owner as commission
*/
function GetTokenFees(address tokenAddress) private view returns (uint256 amount) {
return _systemReserves[tokenAddress];
}
/**
* Get contract's balance
*/
function GetContractBalance() public view returns(uint256)
{
return address(this).balance;
}
/**
* ONLY OWNER
*
* owner: retire hodl safe
*/
function OwnerRetireHodl(address tokenAddress, uint256 id) public onlyOwner {
require(tokenAddress != 0x0);
require(id != 0);
RetireHodl(tokenAddress, id);
}
/**
* owner: change hodling time
*/
function ChangeHodlingTime(uint256 newHodlingDays) onlyOwner public {
require(newHodlingDays >= 60);
hodlingTime = newHodlingDays * 1 days;
}
/**
* owner: change all time high price
*/
function ChangeAllTimeHighPrice(uint256 newAllTimeHighPrice) onlyOwner public {
require(newAllTimeHighPrice > allTimeHighPrice);
allTimeHighPrice = newAllTimeHighPrice;
}
/**
* owner: change comission value
*/
function ChangeComission(uint256 newComission) onlyOwner public {
require(newComission <= 30);
comission = newComission;
}
/**
* owner: withdraw token fees by address
*/
function WithdrawTokenFees(address tokenAddress) onlyOwner public {
require(_systemReserves[tokenAddress] > 0);
uint256 amount = _systemReserves[tokenAddress];
_systemReserves[tokenAddress] = 0;
ERC20Interface token = ERC20Interface(tokenAddress);
require(token.balanceOf(address(this)) >= amount);
token.transfer(msg.sender, amount);
}
/**
* owner: withdraw all eth and all tokens fees
*/
function WithdrawAllFees() onlyOwner public {
// ether
uint256 x = _systemReserves[0x0];
if(x > 0 && x <= address(this).balance) {
_systemReserves[0x0] = 0;
msg.sender.transfer(_systemReserves[0x0]);
}
// tokens
address ta;
ERC20Interface token;
for(uint256 i = 0; i < _listedReserves.length; i++) {
ta = _listedReserves[i];
if(_systemReserves[ta] > 0)
{
x = _systemReserves[ta];
_systemReserves[ta] = 0;
token = ERC20Interface(ta);
token.transfer(msg.sender, x);
}
}
_listedReserves.length = 0;
}
/**
* owner: withdraw ether received through fallback function
*/
function WithdrawEth(uint256 amount) onlyOwner public {
require(amount > 0);
require(address(this).balance >= amount);
msg.sender.transfer(amount);
}
/**
* owner: returns all tokens addresses with fees
*/
function GetTokensAddressesWithFees()
onlyOwner public view
returns (address[], string[], uint256[])
{
uint256 length = _listedReserves.length;
address[] memory tokenAddress = new address[](length);
string[] memory tokenSymbol = new string[](length);
uint256[] memory tokenFees = new uint256[](length);
for (uint256 i = 0; i < length; i++) {
tokenAddress[i] = _listedReserves[i];
ERC20Interface token = ERC20Interface(tokenAddress[i]);
tokenSymbol[i] = token.symbol();
tokenFees[i] = GetTokenFees(tokenAddress[i]);
}
return (tokenAddress, tokenSymbol, tokenFees);
}
/**
* owner: return all tokens to their respective addresses
*/
function ReturnAllTokens(bool onlyAXPR) onlyOwner public
{
uint256 returned;
for(uint256 i = 1; i < _currentIndex; i++) {
Safe storage s = _safes[i];
if (s.id != 0) {
if (
(onlyAXPR && s.tokenAddress == AXPRtoken) ||
!onlyAXPR
)
{
PayToken(s.user, s.tokenAddress, s.amount);
DeleteSafe(s);
_countSafes--;
returned++;
}
}
}
emit onReturnAll(returned);
}
/**
* SAFE MATH FUNCTIONS
*
* @dev Multiplies two numbers, throws on overflow.
*/
function mul(uint256 a, uint256 b) internal pure returns (uint256 c) {
if (a == 0) {
return 0;
}
c = a * b;
assert(c / a == b);
return c;
}
/**
* @dev Integer division of two numbers, truncating the quotient.
*/
function div(uint256 a, uint256 b) internal pure returns (uint256) {
// assert(b > 0); // Solidity automatically throws when dividing by 0
// uint256 c = a / b;
// assert(a == b * c + a % b); // There is no case in which this doesn't hold
return a / b;
}
/**
* @dev Subtracts two numbers, throws on overflow (i.e. if subtrahend is greater than minuend).
*/
function sub(uint256 a, uint256 b) internal pure returns (uint256) {
assert(b <= a);
return a - b;
}
/**
* @dev Adds two numbers, throws on overflow.
*/
function add(uint256 a, uint256 b) internal pure returns (uint256 c) {
c = a + b;
assert(c >= a);
return c;
}
}
contract ERC20Interface {
/* This is a slight change to the ERC20 base standard.
function totalSupply() constant returns (uint256 supply);
is replaced with:
uint256 public totalSupply;
This automatically creates a getter function for the totalSupply.
This is moved to the base contract since public getter functions are not
currently recognised as an implementation of the matching abstract
function by the compiler.
*/
// total amount of tokens
uint256 public totalSupply;
//How many decimals to show.
uint256 public decimals;
// token symbol
function symbol() public view returns (string);
/// @param _owner The address from which the balance will be retrieved
/// @return The balance
function balanceOf(address _owner) public view returns (uint256 balance);
/// @notice send `_value` token to `_to` from `msg.sender`
/// @param _to The address of the recipient
/// @param _value The amount of token to be transferred
/// @return Whether the transfer was successful or not
function transfer(address _to, uint256 _value) public returns (bool success);
/// @notice send `_value` token to `_to` from `_from` on the condition it is approved by `_from`
/// @param _from The address of the sender
/// @param _to The address of the recipient
/// @param _value The amount of token to be transferred
/// @return Whether the transfer was successful or not
function transferFrom(address _from, address _to, uint256 _value) public returns (bool success);
/// @notice `msg.sender` approves `_spender` to spend `_value` tokens
/// @param _spender The address of the account able to transfer the tokens
/// @param _value The amount of tokens to be approved for transfer
/// @return Whether the approval was successful or not
function approve(address _spender, uint256 _value) public returns (bool success);
/// @param _owner The address of the account owning tokens
/// @param _spender The address of the account able to transfer the tokens
/// @return Amount of remaining tokens allowed to spent
function allowance(address _owner, address _spender) public view returns (uint256 remaining);
// solhint-disable-next-line no-simple-event-func-name
event Transfer(address indexed _from, address indexed _to, uint256 _value);
event Approval(address indexed _owner, address indexed _spender, uint256 _value);
}
Read Contract
GetContractBalance 0xf6d0bf2f → uint256
GetHodlTokensBalance 0x98c7aba2 → uint256
GetSafe 0x47f849cd → uint256, address, address, uint256, uint256
GetTokensAddressesWithFees 0xbbe316be → address[], string[], uint256[]
GetUserSafesLength 0xd9d61a10 → uint256
_countSafes 0x93002f02 → uint256
_listedReserves 0x1c019a52 → address
_totalSaved 0x666a7370 → uint256
_userSafes 0x11a3311c → uint256
allTimeHighPrice 0xda546cb2 → uint256
blockedContract 0x71ea29df → bool
comission 0x3a4b4532 → uint256
hodlingTime 0xe2afe3bb → uint256
profileHashed 0x002b5c0a → string
viewSuperOwner 0xd3a516d3 → address
Write Contract 14 functions
These functions modify contract state and require a wallet transaction to execute.
ChangeAllTimeHighPrice 0x365655f0
uint256 newAllTimeHighPrice
ChangeComission 0x9aaa38a6
uint256 newComission
ChangeHodlingTime 0x79883bba
uint256 newHodlingDays
ClaimTokens 0x4d7f917f
address tokenAddress
uint256 id
HodlTokens 0xe61021e8
address tokenAddress
uint256 amount
OwnerRetireHodl 0xcfe7de07
address tokenAddress
uint256 id
ReturnAllTokens 0x650db56d
bool onlyAXPR
WithdrawAllFees 0x99f57e05
No parameters
WithdrawEth 0xb2a3fd05
uint256 amount
WithdrawTokenFees 0x539a67bf
address tokenAddress
changeOwner 0xa6f9dae1
address newOwner
doBlockContract 0x3e8cc273
No parameters
storeProfileHashed 0xd9df23c0
string _profileHashed
unBlockContract 0xd64ee8d2
No parameters
Recent Transactions
This address has 1 on-chain transactions, but only <1% of the chain is indexed. Transactions will appear as indexing progresses. View on Etherscan →