Address Contract Partially Verified
Address
0xb0ce75B1cc46c4a62b87B7DA20bD9136F7DD2228
Balance
0 ETH
Nonce
1
Code Size
17940 bytes
Creator
0x48cB4E3F...393C at tx 0x815880b0...01a5b8
Indexed Transactions
0
Contract Bytecode
17940 bytes
0x60806040526004361061020f5760003560e01c806355f804b311610118578063a22cb465116100a0578063d5abeb011161006f578063d5abeb011461077f578063d936547e146107aa578063da3ef23f146107e7578063e985e9c514610810578063f2fde38b1461084d5761020f565b8063a22cb465146106c5578063b88d4fde146106ee578063c668286214610717578063c87b56dd146107425761020f565b806370a08231116100e757806370a08231146105f2578063715018a61461062f5780637f00c7a6146106465780638da5cb5b1461066f57806395d89b411461069a5761020f565b806355f804b3146105365780635c975abb1461055f5780636352211e1461058a5780636c0360eb146105c75761020f565b80632f745c591161019b57806342842e0e1161016a57806342842e0e14610441578063438b63001461046a57806344a0d68a146104a75780634a4c560d146104d05780634f6ccce7146104f95761020f565b80632f745c59146103b557806330cc7ae0146103f25780633ccfd60b1461041b57806340c10f19146104255761020f565b8063095ea7b3116101e2578063095ea7b3146102e257806313faede61461030b57806318160ddd14610336578063239c70ae1461036157806323b872dd1461038c5761020f565b806301ffc9a71461021457806302329a291461025157806306fdde031461027a578063081812fc146102a5575b600080fd5b34801561022057600080fd5b5061023b60048036038101906102369190612da3565b610876565b6040516102489190612deb565b60405180910390f35b34801561025d57600080fd5b5061027860048036038101906102739190612e32565b6108f0565b005b34801561028657600080fd5b5061028f610989565b60405161029c9190612ef8565b60405180910390f35b3480156102b157600080fd5b506102cc60048036038101906102c79190612f50565b610a1b565b6040516102d99190612fbe565b60405180910390f35b3480156102ee57600080fd5b5061030960048036038101906103049190613005565b610aa0565b005b34801561031757600080fd5b50610320610bb7565b60405161032d9190613054565b60405180910390f35b34801561034257600080fd5b5061034b610bbd565b6040516103589190613054565b60405180910390f35b34801561036d57600080fd5b50610376610bca565b6040516103839190613054565b60405180910390f35b34801561039857600080fd5b506103b360048036038101906103ae919061306f565b610bd0565b005b3480156103c157600080fd5b506103dc60048036038101906103d79190613005565b610c30565b6040516103e99190613054565b60405180910390f35b3480156103fe57600080fd5b50610419600480360381019061041491906130c2565b610cd5565b005b610423610dac565b005b61043f600480360381019061043a9190613005565b610ea8565b005b34801561044d57600080fd5b506104686004803603810190610463919061306f565b610fee565b005b34801561047657600080fd5b50610491600480360381019061048c91906130c2565b61100e565b60405161049e91906131ad565b60405180910390f35b3480156104b357600080fd5b506104ce60048036038101906104c99190612f50565b6110bc565b005b3480156104dc57600080fd5b506104f760048036038101906104f291906130c2565b611142565b005b34801561050557600080fd5b50610520600480360381019061051b9190612f50565b611219565b60405161052d9190613054565b60405180910390f35b34801561054257600080fd5b5061055d60048036038101906105589190613304565b61128a565b005b34801561056b57600080fd5b50610574611319565b6040516105819190612deb565b60405180910390f35b34801561059657600080fd5b506105b160048036038101906105ac9190612f50565b61132c565b6040516105be9190612fbe565b60405180910390f35b3480156105d357600080fd5b506105dc6113dd565b6040516105e99190612ef8565b60405180910390f35b3480156105fe57600080fd5b50610619600480360381019061061491906130c2565b61146b565b6040516106269190613054565b60405180910390f35b34801561063b57600080fd5b50610644611522565b005b34801561065257600080fd5b5061066d60048036038101906106689190612f50565b6115aa565b005b34801561067b57600080fd5b50610684611630565b6040516106919190612fbe565b60405180910390f35b3480156106a657600080fd5b506106af61165a565b6040516106bc9190612ef8565b60405180910390f35b3480156106d157600080fd5b506106ec60048036038101906106e7919061334d565b6116ec565b005b3480156106fa57600080fd5b506107156004803603810190610710919061342e565b611702565b005b34801561072357600080fd5b5061072c611764565b6040516107399190612ef8565b60405180910390f35b34801561074e57600080fd5b5061076960048036038101906107649190612f50565b6117f2565b6040516107769190612ef8565b60405180910390f35b34801561078b57600080fd5b5061079461189c565b6040516107a19190613054565b60405180910390f35b3480156107b657600080fd5b506107d160048036038101906107cc91906130c2565b6118a2565b6040516107de9190612deb565b60405180910390f35b3480156107f357600080fd5b5061080e60048036038101906108099190613304565b6118c2565b005b34801561081c57600080fd5b50610837600480360381019061083291906134b1565b611951565b6040516108449190612deb565b60405180910390f35b34801561085957600080fd5b50610874600480360381019061086f91906130c2565b6119e5565b005b60007f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806108e957506108e882611adc565b5b9050919050565b6108f8611bbe565b73ffffffffffffffffffffffffffffffffffffffff16610916611630565b73ffffffffffffffffffffffffffffffffffffffff161461096c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109639061353d565b60405180910390fd5b80601060006101000a81548160ff02191690831515021790555050565b6060600080546109989061358c565b80601f01602080910402602001604051908101604052809291908181526020018280546109c49061358c565b8015610a115780601f106109e657610100808354040283529160200191610a11565b820191906000526020600020905b8154815290600101906020018083116109f457829003601f168201915b5050505050905090565b6000610a2682611bc6565b610a65576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a5c9061362f565b60405180910390fd5b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000610aab8261132c565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603610b1b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b12906136c1565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610b3a611bbe565b73ffffffffffffffffffffffffffffffffffffffff161480610b695750610b6881610b63611bbe565b611951565b5b610ba8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b9f90613753565b60405180910390fd5b610bb28383611c32565b505050565b600d5481565b6000600880549050905090565b600f5481565b610be1610bdb611bbe565b82611ceb565b610c20576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c17906137e5565b60405180910390fd5b610c2b838383611dc9565b505050565b6000610c3b8361146b565b8210610c7c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c7390613877565b60405180910390fd5b600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002054905092915050565b610cdd611bbe565b73ffffffffffffffffffffffffffffffffffffffff16610cfb611630565b73ffffffffffffffffffffffffffffffffffffffff1614610d51576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d489061353d565b60405180910390fd5b6000601160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b610db4611bbe565b73ffffffffffffffffffffffffffffffffffffffff16610dd2611630565b73ffffffffffffffffffffffffffffffffffffffff1614610e28576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e1f9061353d565b60405180910390fd5b6000610e32611630565b73ffffffffffffffffffffffffffffffffffffffff1647604051610e55906138c8565b60006040518083038185875af1925050503d8060008114610e92576040519150601f19603f3d011682016040523d82523d6000602084013e610e97565b606091505b5050905080610ea557600080fd5b50565b6000610eb2610bbd565b9050601060009054906101000a900460ff1615610ece57600080fd5b60008211610edb57600080fd5b600f54821115610eea57600080fd5b600e548282610ef9919061390c565b1115610f0457600080fd5b610f0c611630565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610fb25760011515601160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16151514610fb15781600d54610fa49190613962565b341015610fb057600080fd5b5b5b6000600190505b828111610fe857610fd5848284610fd0919061390c565b61202f565b8080610fe0906139bc565b915050610fb9565b50505050565b61100983838360405180602001604052806000815250611702565b505050565b6060600061101b8361146b565b905060008167ffffffffffffffff811115611039576110386131d9565b5b6040519080825280602002602001820160405280156110675781602001602082028036833780820191505090505b50905060005b828110156110b15761107f8582610c30565b82828151811061109257611091613a04565b5b60200260200101818152505080806110a9906139bc565b91505061106d565b508092505050919050565b6110c4611bbe565b73ffffffffffffffffffffffffffffffffffffffff166110e2611630565b73ffffffffffffffffffffffffffffffffffffffff1614611138576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161112f9061353d565b60405180910390fd5b80600d8190555050565b61114a611bbe565b73ffffffffffffffffffffffffffffffffffffffff16611168611630565b73ffffffffffffffffffffffffffffffffffffffff16146111be576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111b59061353d565b60405180910390fd5b6001601160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b6000611223610bbd565b8210611264576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161125b90613aa5565b60405180910390fd5b6008828154811061127857611277613a04565b5b90600052602060002001549050919050565b611292611bbe565b73ffffffffffffffffffffffffffffffffffffffff166112b0611630565b73ffffffffffffffffffffffffffffffffffffffff1614611306576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112fd9061353d565b60405180910390fd5b80600b90816113159190613c71565b5050565b601060009054906101000a900460ff1681565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036113d4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113cb90613db5565b60405180910390fd5b80915050919050565b600b80546113ea9061358c565b80601f01602080910402602001604051908101604052809291908181526020018280546114169061358c565b80156114635780601f1061143857610100808354040283529160200191611463565b820191906000526020600020905b81548152906001019060200180831161144657829003601f168201915b505050505081565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036114db576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114d290613e47565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b61152a611bbe565b73ffffffffffffffffffffffffffffffffffffffff16611548611630565b73ffffffffffffffffffffffffffffffffffffffff161461159e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115959061353d565b60405180910390fd5b6115a8600061204d565b565b6115b2611bbe565b73ffffffffffffffffffffffffffffffffffffffff166115d0611630565b73ffffffffffffffffffffffffffffffffffffffff1614611626576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161161d9061353d565b60405180910390fd5b80600f8190555050565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6060600180546116699061358c565b80601f01602080910402602001604051908101604052809291908181526020018280546116959061358c565b80156116e25780601f106116b7576101008083540402835291602001916116e2565b820191906000526020600020905b8154815290600101906020018083116116c557829003601f168201915b5050505050905090565b6116fe6116f7611bbe565b8383612113565b5050565b61171361170d611bbe565b83611ceb565b611752576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611749906137e5565b60405180910390fd5b61175e8484848461227f565b50505050565b600c80546117719061358c565b80601f016020809104026020016040519081016040528092919081815260200182805461179d9061358c565b80156117ea5780601f106117bf576101008083540402835291602001916117ea565b820191906000526020600020905b8154815290600101906020018083116117cd57829003601f168201915b505050505081565b60606117fd82611bc6565b61183c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161183390613ed9565b60405180910390fd5b60006118466122db565b905060008151116118665760405180602001604052806000815250611894565b806118708461236d565b600c60405160200161188493929190613fb8565b6040516020818303038152906040525b915050919050565b600e5481565b60116020528060005260406000206000915054906101000a900460ff1681565b6118ca611bbe565b73ffffffffffffffffffffffffffffffffffffffff166118e8611630565b73ffffffffffffffffffffffffffffffffffffffff161461193e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119359061353d565b60405180910390fd5b80600c908161194d9190613c71565b5050565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b6119ed611bbe565b73ffffffffffffffffffffffffffffffffffffffff16611a0b611630565b73ffffffffffffffffffffffffffffffffffffffff1614611a61576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a589061353d565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611ad0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ac79061405b565b60405180910390fd5b611ad98161204d565b50565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480611ba757507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80611bb75750611bb6826124cd565b5b9050919050565b600033905090565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16611ca58361132c565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b6000611cf682611bc6565b611d35576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d2c906140ed565b60405180910390fd5b6000611d408361132c565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161480611daf57508373ffffffffffffffffffffffffffffffffffffffff16611d9784610a1b565b73ffffffffffffffffffffffffffffffffffffffff16145b80611dc05750611dbf8185611951565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff16611de98261132c565b73ffffffffffffffffffffffffffffffffffffffff1614611e3f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e369061417f565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611eae576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ea590614211565b60405180910390fd5b611eb9838383612537565b611ec4600082611c32565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611f149190614231565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611f6b919061390c565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a461202a838383612649565b505050565b61204982826040518060200160405280600081525061264e565b5050565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612181576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612178906142b1565b60405180910390fd5b80600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516122729190612deb565b60405180910390a3505050565b61228a848484611dc9565b612296848484846126a9565b6122d5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122cc90614343565b60405180910390fd5b50505050565b6060600b80546122ea9061358c565b80601f01602080910402602001604051908101604052809291908181526020018280546123169061358c565b80156123635780601f1061233857610100808354040283529160200191612363565b820191906000526020600020905b81548152906001019060200180831161234657829003601f168201915b5050505050905090565b6060600082036123b4576040518060400160405280600181526020017f300000000000000000000000000000000000000000000000000000000000000081525090506124c8565b600082905060005b600082146123e65780806123cf906139bc565b915050600a826123df9190614392565b91506123bc565b60008167ffffffffffffffff811115612402576124016131d9565b5b6040519080825280601f01601f1916602001820160405280156124345781602001600182028036833780820191505090505b5090505b600085146124c15760018261244d9190614231565b9150600a8561245c91906143c3565b6030612468919061390c565b60f81b81838151811061247e5761247d613a04565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a856124ba9190614392565b9450612438565b8093505050505b919050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b612542838383612830565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036125845761257f81612835565b6125c3565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16146125c2576125c1838261287e565b5b5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361260557612600816129eb565b612644565b8273ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614612643576126428282612abc565b5b5b505050565b505050565b6126588383612b3b565b61266560008484846126a9565b6126a4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161269b90614343565b60405180910390fd5b505050565b60006126ca8473ffffffffffffffffffffffffffffffffffffffff16612d14565b15612823578373ffffffffffffffffffffffffffffffffffffffff1663150b7a026126f3611bbe565b8786866040518563ffffffff1660e01b81526004016127159493929190614449565b6020604051808303816000875af192505050801561275157506040513d601f19601f8201168201806040525081019061274e91906144aa565b60015b6127d3573d8060008114612781576040519150601f19603f3d011682016040523d82523d6000602084013e612786565b606091505b5060008151036127cb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127c290614343565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050612828565b600190505b949350505050565b505050565b6008805490506009600083815260200190815260200160002081905550600881908060018154018082558091505060019003906000526020600020016000909190919091505550565b6000600161288b8461146b565b6128959190614231565b905060006007600084815260200190815260200160002054905081811461297a576000600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002054905080600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002081905550816007600083815260200190815260200160002081905550505b6007600084815260200190815260200160002060009055600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008381526020019081526020016000206000905550505050565b600060016008805490506129ff9190614231565b9050600060096000848152602001908152602001600020549050600060088381548110612a2f57612a2e613a04565b5b906000526020600020015490508060088381548110612a5157612a50613a04565b5b906000526020600020018190555081600960008381526020019081526020016000208190555060096000858152602001908152602001600020600090556008805480612aa057612a9f6144d7565b5b6001900381819060005260206000200160009055905550505050565b6000612ac78361146b565b905081600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002081905550806007600084815260200190815260200160002081905550505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612baa576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ba190614552565b60405180910390fd5b612bb381611bc6565b15612bf3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612bea906145be565b60405180910390fd5b612bff60008383612537565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612c4f919061390c565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4612d1060008383612649565b5050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b6000604051905090565b600080fd5b600080fd5b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b612d8081612d4b565b8114612d8b57600080fd5b50565b600081359050612d9d81612d77565b92915050565b600060208284031215612db957612db8612d41565b5b6000612dc784828501612d8e565b91505092915050565b60008115159050919050565b612de581612dd0565b82525050565b6000602082019050612e006000830184612ddc565b92915050565b612e0f81612dd0565b8114612e1a57600080fd5b50565b600081359050612e2c81612e06565b92915050565b600060208284031215612e4857612e47612d41565b5b6000612e5684828501612e1d565b91505092915050565b600081519050919050565b600082825260208201905092915050565b60005b83811015612e99578082015181840152602081019050612e7e565b83811115612ea8576000848401525b50505050565b6000601f19601f8301169050919050565b6000612eca82612e5f565b612ed48185612e6a565b9350612ee4818560208601612e7b565b612eed81612eae565b840191505092915050565b60006020820190508181036000830152612f128184612ebf565b905092915050565b6000819050919050565b612f2d81612f1a565b8114612f3857600080fd5b50565b600081359050612f4a81612f24565b92915050565b600060208284031215612f6657612f65612d41565b5b6000612f7484828501612f3b565b91505092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000612fa882612f7d565b9050919050565b612fb881612f9d565b82525050565b6000602082019050612fd36000830184612faf565b92915050565b612fe281612f9d565b8114612fed57600080fd5b50565b600081359050612fff81612fd9565b92915050565b6000806040838503121561301c5761301b612d41565b5b600061302a85828601612ff0565b925050602061303b85828601612f3b565b9150509250929050565b61304e81612f1a565b82525050565b60006020820190506130696000830184613045565b92915050565b60008060006060848603121561308857613087612d41565b5b600061309686828701612ff0565b93505060206130a786828701612ff0565b92505060406130b886828701612f3b565b9150509250925092565b6000602082840312156130d8576130d7612d41565b5b60006130e684828501612ff0565b91505092915050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b61312481612f1a565b82525050565b6000613136838361311b565b60208301905092915050565b6000602082019050919050565b600061315a826130ef565b61316481856130fa565b935061316f8361310b565b8060005b838110156131a0578151613187888261312a565b975061319283613142565b925050600181019050613173565b5085935050505092915050565b600060208201905081810360008301526131c7818461314f565b905092915050565b600080fd5b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b61321182612eae565b810181811067ffffffffffffffff821117156132305761322f6131d9565b5b80604052505050565b6000613243612d37565b905061324f8282613208565b919050565b600067ffffffffffffffff82111561326f5761326e6131d9565b5b61327882612eae565b9050602081019050919050565b82818337600083830152505050565b60006132a76132a284613254565b613239565b9050828152602081018484840111156132c3576132c26131d4565b5b6132ce848285613285565b509392505050565b600082601f8301126132eb576132ea6131cf565b5b81356132fb848260208601613294565b91505092915050565b60006020828403121561331a57613319612d41565b5b600082013567ffffffffffffffff81111561333857613337612d46565b5b613344848285016132d6565b91505092915050565b6000806040838503121561336457613363612d41565b5b600061337285828601612ff0565b925050602061338385828601612e1d565b9150509250929050565b600067ffffffffffffffff8211156133a8576133a76131d9565b5b6133b182612eae565b9050602081019050919050565b60006133d16133cc8461338d565b613239565b9050828152602081018484840111156133ed576133ec6131d4565b5b6133f8848285613285565b509392505050565b600082601f830112613415576134146131cf565b5b81356134258482602086016133be565b91505092915050565b6000806000806080858703121561344857613447612d41565b5b600061345687828801612ff0565b945050602061346787828801612ff0565b935050604061347887828801612f3b565b925050606085013567ffffffffffffffff81111561349957613498612d46565b5b6134a587828801613400565b91505092959194509250565b600080604083850312156134c8576134c7612d41565b5b60006134d685828601612ff0565b92505060206134e785828601612ff0565b9150509250929050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000613527602083612e6a565b9150613532826134f1565b602082019050919050565b600060208201905081810360008301526135568161351a565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806135a457607f821691505b6020821081036135b7576135b661355d565b5b50919050565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b6000613619602c83612e6a565b9150613624826135bd565b604082019050919050565b600060208201905081810360008301526136488161360c565b9050919050565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b60006136ab602183612e6a565b91506136b68261364f565b604082019050919050565b600060208201905081810360008301526136da8161369e565b9050919050565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b600061373d603883612e6a565b9150613748826136e1565b604082019050919050565b6000602082019050818103600083015261376c81613730565b9050919050565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b60006137cf603183612e6a565b91506137da82613773565b604082019050919050565b600060208201905081810360008301526137fe816137c2565b9050919050565b7f455243373231456e756d657261626c653a206f776e657220696e646578206f7560008201527f74206f6620626f756e6473000000000000000000000000000000000000000000602082015250565b6000613861602b83612e6a565b915061386c82613805565b604082019050919050565b6000602082019050818103600083015261389081613854565b9050919050565b600081905092915050565b50565b60006138b2600083613897565b91506138bd826138a2565b600082019050919050565b60006138d3826138a5565b9150819050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061391782612f1a565b915061392283612f1a565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115613957576139566138dd565b5b828201905092915050565b600061396d82612f1a565b915061397883612f1a565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156139b1576139b06138dd565b5b828202905092915050565b60006139c782612f1a565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036139f9576139f86138dd565b5b600182019050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60008201527f7574206f6620626f756e64730000000000000000000000000000000000000000602082015250565b6000613a8f602c83612e6a565b9150613a9a82613a33565b604082019050919050565b60006020820190508181036000830152613abe81613a82565b9050919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b600060088302613b277fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82613aea565b613b318683613aea565b95508019841693508086168417925050509392505050565b6000819050919050565b6000613b6e613b69613b6484612f1a565b613b49565b612f1a565b9050919050565b6000819050919050565b613b8883613b53565b613b9c613b9482613b75565b848454613af7565b825550505050565b600090565b613bb1613ba4565b613bbc818484613b7f565b505050565b5b81811015613be057613bd5600082613ba9565b600181019050613bc2565b5050565b601f821115613c2557613bf681613ac5565b613bff84613ada565b81016020851015613c0e578190505b613c22613c1a85613ada565b830182613bc1565b50505b505050565b600082821c905092915050565b6000613c4860001984600802613c2a565b1980831691505092915050565b6000613c618383613c37565b9150826002028217905092915050565b613c7a82612e5f565b67ffffffffffffffff811115613c9357613c926131d9565b5b613c9d825461358c565b613ca8828285613be4565b600060209050601f831160018114613cdb5760008415613cc9578287015190505b613cd38582613c55565b865550613d3b565b601f198416613ce986613ac5565b60005b82811015613d1157848901518255600182019150602085019450602081019050613cec565b86831015613d2e5784890151613d2a601f891682613c37565b8355505b6001600288020188555050505b505050505050565b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b6000613d9f602983612e6a565b9150613daa82613d43565b604082019050919050565b60006020820190508181036000830152613dce81613d92565b9050919050565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b6000613e31602a83612e6a565b9150613e3c82613dd5565b604082019050919050565b60006020820190508181036000830152613e6081613e24565b9050919050565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b6000613ec3602f83612e6a565b9150613ece82613e67565b604082019050919050565b60006020820190508181036000830152613ef281613eb6565b9050919050565b600081905092915050565b6000613f0f82612e5f565b613f198185613ef9565b9350613f29818560208601612e7b565b80840191505092915050565b60008154613f428161358c565b613f4c8186613ef9565b94506001821660008114613f675760018114613f7c57613faf565b60ff1983168652811515820286019350613faf565b613f8585613ac5565b60005b83811015613fa757815481890152600182019150602081019050613f88565b838801955050505b50505092915050565b6000613fc48286613f04565b9150613fd08285613f04565b9150613fdc8284613f35565b9150819050949350505050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000614045602683612e6a565b915061405082613fe9565b604082019050919050565b6000602082019050818103600083015261407481614038565b9050919050565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b60006140d7602c83612e6a565b91506140e28261407b565b604082019050919050565b60006020820190508181036000830152614106816140ca565b9050919050565b7f4552433732313a207472616e736665722066726f6d20696e636f72726563742060008201527f6f776e6572000000000000000000000000000000000000000000000000000000602082015250565b6000614169602583612e6a565b91506141748261410d565b604082019050919050565b600060208201905081810360008301526141988161415c565b9050919050565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b60006141fb602483612e6a565b91506142068261419f565b604082019050919050565b6000602082019050818103600083015261422a816141ee565b9050919050565b600061423c82612f1a565b915061424783612f1a565b92508282101561425a576142596138dd565b5b828203905092915050565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b600061429b601983612e6a565b91506142a682614265565b602082019050919050565b600060208201905081810360008301526142ca8161428e565b9050919050565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b600061432d603283612e6a565b9150614338826142d1565b604082019050919050565b6000602082019050818103600083015261435c81614320565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600061439d82612f1a565b91506143a883612f1a565b9250826143b8576143b7614363565b5b828204905092915050565b60006143ce82612f1a565b91506143d983612f1a565b9250826143e9576143e8614363565b5b828206905092915050565b600081519050919050565b600082825260208201905092915050565b600061441b826143f4565b61442581856143ff565b9350614435818560208601612e7b565b61443e81612eae565b840191505092915050565b600060808201905061445e6000830187612faf565b61446b6020830186612faf565b6144786040830185613045565b818103606083015261448a8184614410565b905095945050505050565b6000815190506144a481612d77565b92915050565b6000602082840312156144c0576144bf612d41565b5b60006144ce84828501614495565b91505092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b600061453c602083612e6a565b915061454782614506565b602082019050919050565b6000602082019050818103600083015261456b8161452f565b9050919050565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b60006145a8601c83612e6a565b91506145b382614572565b602082019050919050565b600060208201905081810360008301526145d78161459b565b905091905056fea264697066735822122050c287530a8363780b3ac0c412183ffa09dc701ea3083420164e972cc8ebb26864736f6c634300080f0033
Verified Source Code Partial Match
Compiler: v0.8.15+commit.e14f2714
EVM: london
Optimization: No
NFT.sol 718 lines
// SPDX-License-Identifier: GPL-3.0
pragma solidity ^0.8.0;
library Strings {
bytes16 private constant _HEX_SYMBOLS = "0123456789abcdef";
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);
}
}
pragma solidity ^0.8.0;
abstract contract Context {
function _msgSender() internal view virtual returns (address) {
return msg.sender;
}
function _msgData() internal view virtual returns (bytes calldata) {
return msg.data;
}
}
pragma solidity ^0.8.0;
abstract contract Ownable is Context {
address private _owner;
event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);
constructor() {
_transferOwnership(_msgSender());
}
function owner() public view virtual returns (address) {
return _owner;
}
modifier onlyOwner() {
require(owner() == _msgSender(), "Ownable: caller is not the owner");
_;
}
function renounceOwnership() public virtual onlyOwner {
_transferOwnership(address(0));
}
function transferOwnership(address newOwner) public virtual onlyOwner {
require(newOwner != address(0), "Ownable: new owner is the zero address");
_transferOwnership(newOwner);
}
function _transferOwnership(address newOwner) internal virtual {
address oldOwner = _owner;
_owner = newOwner;
emit OwnershipTransferred(oldOwner, newOwner);
}
}
pragma solidity ^0.8.1;
library Address {
function isContract(address account) internal view returns (bool) {
return account.code.length > 0;
}
function sendValue(address payable recipient, uint256 amount) internal {
require(address(this).balance >= amount, "Address: insufficient balance");
(bool success, ) = recipient.call{value: amount}("");
require(success, "Address: unable to send value, recipient may have reverted");
}
function functionCall(address target, bytes memory data) internal returns (bytes memory) {
return functionCall(target, data, "Address: low-level call failed");
}
function functionCall(
address target,
bytes memory data,
string memory errorMessage
) internal returns (bytes memory) {
return functionCallWithValue(target, data, 0, errorMessage);
}
function functionCallWithValue(
address target,
bytes memory data,
uint256 value
) internal returns (bytes memory) {
return functionCallWithValue(target, data, value, "Address: low-level call with value failed");
}
function functionCallWithValue(
address target,
bytes memory data,
uint256 value,
string memory errorMessage
) internal returns (bytes memory) {
require(address(this).balance >= value, "Address: insufficient balance for call");
require(isContract(target), "Address: call to non-contract");
(bool success, bytes memory returndata) = target.call{value: value}(data);
return verifyCallResult(success, returndata, errorMessage);
}
function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {
return functionStaticCall(target, data, "Address: low-level static call failed");
}
function functionStaticCall(
address target,
bytes memory data,
string memory errorMessage
) internal view returns (bytes memory) {
require(isContract(target), "Address: static call to non-contract");
(bool success, bytes memory returndata) = target.staticcall(data);
return verifyCallResult(success, returndata, errorMessage);
}
function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {
return functionDelegateCall(target, data, "Address: low-level delegate call failed");
}
function functionDelegateCall(
address target,
bytes memory data,
string memory errorMessage
) internal returns (bytes memory) {
require(isContract(target), "Address: delegate call to non-contract");
(bool success, bytes memory returndata) = target.delegatecall(data);
return verifyCallResult(success, returndata, errorMessage);
}
function verifyCallResult(
bool success,
bytes memory returndata,
string memory errorMessage
) internal pure returns (bytes memory) {
if (success) {
return returndata;
} else {
if (returndata.length > 0) {
assembly {
let returndata_size := mload(returndata)
revert(add(32, returndata), returndata_size)
}
} else {
revert(errorMessage);
}
}
}
}
pragma solidity ^0.8.0;
interface IERC721Receiver {
function onERC721Received(
address operator,
address from,
uint256 tokenId,
bytes calldata data
) external returns (bytes4);
}
pragma solidity ^0.8.0;
interface IERC165 {
function supportsInterface(bytes4 interfaceId) external view returns (bool);
}
pragma solidity ^0.8.0;
abstract contract ERC165 is IERC165 {
function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) {
return interfaceId == type(IERC165).interfaceId;
}
}
pragma solidity ^0.8.0;
interface IERC721 is IERC165 {
event Transfer(address indexed from, address indexed to, uint256 indexed tokenId);
event Approval(address indexed owner, address indexed approved, uint256 indexed tokenId);
event ApprovalForAll(address indexed owner, address indexed operator, bool approved);
function balanceOf(address owner) external view returns (uint256 balance);
function ownerOf(uint256 tokenId) external view returns (address owner);
function safeTransferFrom(
address from,
address to,
uint256 tokenId
) external;
function transferFrom(
address from,
address to,
uint256 tokenId
) external;
function approve(address to, uint256 tokenId) external;
function getApproved(uint256 tokenId) external view returns (address operator);
function setApprovalForAll(address operator, bool _approved) external;
function isApprovedForAll(address owner, address operator) external view returns (bool);
function safeTransferFrom(
address from,
address to,
uint256 tokenId,
bytes calldata data
) external;
}
pragma solidity ^0.8.0;
interface IERC721Enumerable is IERC721 {
function totalSupply() external view returns (uint256);
function tokenOfOwnerByIndex(address owner, uint256 index) external view returns (uint256);
function tokenByIndex(uint256 index) external view returns (uint256);
}
pragma solidity ^0.8.0;
interface IERC721Metadata is IERC721 {
function name() external view returns (string memory);
function symbol() external view returns (string memory);
function tokenURI(uint256 tokenId) external view returns (string memory);
}
pragma solidity ^0.8.0;
contract ERC721 is Context, ERC165, IERC721, IERC721Metadata {
using Address for address;
using Strings for uint256;
string private _name;
string private _symbol;
mapping(uint256 => address) private _owners;
mapping(address => uint256) private _balances;
mapping(uint256 => address) private _tokenApprovals;
mapping(address => mapping(address => bool)) private _operatorApprovals;
constructor(string memory name_, string memory symbol_) {
_name = name_;
_symbol = symbol_;
}
function supportsInterface(bytes4 interfaceId) public view virtual override(ERC165, IERC165) returns (bool) {
return
interfaceId == type(IERC721).interfaceId ||
interfaceId == type(IERC721Metadata).interfaceId ||
super.supportsInterface(interfaceId);
}
function balanceOf(address owner) public view virtual override returns (uint256) {
require(owner != address(0), "ERC721: balance query for the zero address");
return _balances[owner];
}
function ownerOf(uint256 tokenId) public view virtual override returns (address) {
address owner = _owners[tokenId];
require(owner != address(0), "ERC721: owner query for nonexistent token");
return owner;
}
function name() public view virtual override returns (string memory) {
return _name;
}
function symbol() public view virtual override returns (string memory) {
return _symbol;
}
function tokenURI(uint256 tokenId) public view virtual override returns (string memory) {
require(_exists(tokenId), "ERC721Metadata: URI query for nonexistent token");
string memory baseURI = _baseURI();
return bytes(baseURI).length > 0 ? string(abi.encodePacked(baseURI, tokenId.toString())) : "";
}
function _baseURI() internal view virtual returns (string memory) {
return "";
}
function approve(address to, uint256 tokenId) public virtual override {
address owner = ERC721.ownerOf(tokenId);
require(to != owner, "ERC721: approval to current owner");
require(
_msgSender() == owner || isApprovedForAll(owner, _msgSender()),
"ERC721: approve caller is not owner nor approved for all"
);
_approve(to, tokenId);
}
function getApproved(uint256 tokenId) public view virtual override returns (address) {
require(_exists(tokenId), "ERC721: approved query for nonexistent token");
return _tokenApprovals[tokenId];
}
function setApprovalForAll(address operator, bool approved) public virtual override {
_setApprovalForAll(_msgSender(), operator, approved);
}
function isApprovedForAll(address owner, address operator) public view virtual override returns (bool) {
return _operatorApprovals[owner][operator];
}
function transferFrom(
address from,
address to,
uint256 tokenId
) public virtual override {
require(_isApprovedOrOwner(_msgSender(), tokenId), "ERC721: transfer caller is not owner nor approved");
_transfer(from, to, tokenId);
}
function safeTransferFrom(
address from,
address to,
uint256 tokenId
) public virtual override {
safeTransferFrom(from, to, tokenId, "");
}
function safeTransferFrom(
address from,
address to,
uint256 tokenId,
bytes memory _data
) public virtual override {
require(_isApprovedOrOwner(_msgSender(), tokenId), "ERC721: transfer caller is not owner nor approved");
_safeTransfer(from, to, tokenId, _data);
}
function _safeTransfer(
address from,
address to,
uint256 tokenId,
bytes memory _data
) internal virtual {
_transfer(from, to, tokenId);
require(_checkOnERC721Received(from, to, tokenId, _data), "ERC721: transfer to non ERC721Receiver implementer");
}
function _exists(uint256 tokenId) internal view virtual returns (bool) {
return _owners[tokenId] != address(0);
}
function _isApprovedOrOwner(address spender, uint256 tokenId) internal view virtual returns (bool) {
require(_exists(tokenId), "ERC721: operator query for nonexistent token");
address owner = ERC721.ownerOf(tokenId);
return (spender == owner || getApproved(tokenId) == spender || isApprovedForAll(owner, spender));
}
function _safeMint(address to, uint256 tokenId) internal virtual {
_safeMint(to, tokenId, "");
}
function _safeMint(
address to,
uint256 tokenId,
bytes memory _data
) internal virtual {
_mint(to, tokenId);
require(
_checkOnERC721Received(address(0), to, tokenId, _data),
"ERC721: transfer to non ERC721Receiver implementer"
);
}
function _mint(address to, uint256 tokenId) internal virtual {
require(to != address(0), "ERC721: mint to the zero address");
require(!_exists(tokenId), "ERC721: token already minted");
_beforeTokenTransfer(address(0), to, tokenId);
_balances[to] += 1;
_owners[tokenId] = to;
emit Transfer(address(0), to, tokenId);
_afterTokenTransfer(address(0), to, tokenId);
}
function _burn(uint256 tokenId) internal virtual {
address owner = ERC721.ownerOf(tokenId);
_beforeTokenTransfer(owner, address(0), tokenId);
_approve(address(0), tokenId);
_balances[owner] -= 1;
delete _owners[tokenId];
emit Transfer(owner, address(0), tokenId);
_afterTokenTransfer(owner, address(0), tokenId);
}
function _transfer(
address from,
address to,
uint256 tokenId
) internal virtual {
require(ERC721.ownerOf(tokenId) == from, "ERC721: transfer from incorrect owner");
require(to != address(0), "ERC721: transfer to the zero address");
_beforeTokenTransfer(from, to, tokenId);
_approve(address(0), tokenId);
_balances[from] -= 1;
_balances[to] += 1;
_owners[tokenId] = to;
emit Transfer(from, to, tokenId);
_afterTokenTransfer(from, to, tokenId);
}
function _approve(address to, uint256 tokenId) internal virtual {
_tokenApprovals[tokenId] = to;
emit Approval(ERC721.ownerOf(tokenId), to, tokenId);
}
function _setApprovalForAll(
address owner,
address operator,
bool approved
) internal virtual {
require(owner != operator, "ERC721: approve to caller");
_operatorApprovals[owner][operator] = approved;
emit ApprovalForAll(owner, operator, approved);
}
function _checkOnERC721Received(
address from,
address to,
uint256 tokenId,
bytes memory _data
) private returns (bool) {
if (to.isContract()) {
try IERC721Receiver(to).onERC721Received(_msgSender(), from, tokenId, _data) returns (bytes4 retval) {
return retval == IERC721Receiver.onERC721Received.selector;
} catch (bytes memory reason) {
if (reason.length == 0) {
revert("ERC721: transfer to non ERC721Receiver implementer");
} else {
assembly {
revert(add(32, reason), mload(reason))
}
}
}
} else {
return true;
}
}
function _beforeTokenTransfer(
address from,
address to,
uint256 tokenId
) internal virtual {}
function _afterTokenTransfer(
address from,
address to,
uint256 tokenId
) internal virtual {}
}
pragma solidity ^0.8.0;
abstract contract ERC721Enumerable is ERC721, IERC721Enumerable {
mapping(address => mapping(uint256 => uint256)) private _ownedTokens;
mapping(uint256 => uint256) private _ownedTokensIndex;
uint256[] private _allTokens;
mapping(uint256 => uint256) private _allTokensIndex;
function supportsInterface(bytes4 interfaceId) public view virtual override(IERC165, ERC721) returns (bool) {
return interfaceId == type(IERC721Enumerable).interfaceId || super.supportsInterface(interfaceId);
}
function tokenOfOwnerByIndex(address owner, uint256 index) public view virtual override returns (uint256) {
require(index < ERC721.balanceOf(owner), "ERC721Enumerable: owner index out of bounds");
return _ownedTokens[owner][index];
}
function totalSupply() public view virtual override returns (uint256) {
return _allTokens.length;
}
function tokenByIndex(uint256 index) public view virtual override returns (uint256) {
require(index < ERC721Enumerable.totalSupply(), "ERC721Enumerable: global index out of bounds");
return _allTokens[index];
}
function _beforeTokenTransfer(
address from,
address to,
uint256 tokenId
) internal virtual override {
super._beforeTokenTransfer(from, to, tokenId);
if (from == address(0)) {
_addTokenToAllTokensEnumeration(tokenId);
} else if (from != to) {
_removeTokenFromOwnerEnumeration(from, tokenId);
}
if (to == address(0)) {
_removeTokenFromAllTokensEnumeration(tokenId);
} else if (to != from) {
_addTokenToOwnerEnumeration(to, tokenId);
}
}
function _addTokenToOwnerEnumeration(address to, uint256 tokenId) private {
uint256 length = ERC721.balanceOf(to);
_ownedTokens[to][length] = tokenId;
_ownedTokensIndex[tokenId] = length;
}
function _addTokenToAllTokensEnumeration(uint256 tokenId) private {
_allTokensIndex[tokenId] = _allTokens.length;
_allTokens.push(tokenId);
}
function _removeTokenFromOwnerEnumeration(address from, uint256 tokenId) private {
uint256 lastTokenIndex = ERC721.balanceOf(from) - 1;
uint256 tokenIndex = _ownedTokensIndex[tokenId];
if (tokenIndex != lastTokenIndex) {
uint256 lastTokenId = _ownedTokens[from][lastTokenIndex];
_ownedTokens[from][tokenIndex] = lastTokenId;
_ownedTokensIndex[lastTokenId] = tokenIndex;
}
delete _ownedTokensIndex[tokenId];
delete _ownedTokens[from][lastTokenIndex];
}
function _removeTokenFromAllTokensEnumeration(uint256 tokenId) private {
uint256 lastTokenIndex = _allTokens.length - 1;
uint256 tokenIndex = _allTokensIndex[tokenId];
uint256 lastTokenId = _allTokens[lastTokenIndex];
_allTokens[tokenIndex] = lastTokenId;
_allTokensIndex[lastTokenId] = tokenIndex;
delete _allTokensIndex[tokenId];
_allTokens.pop();
}
}
pragma solidity >=0.7.0 <0.9.0;
contract NFT is ERC721Enumerable, Ownable {
using Strings for uint256;
string public baseURI;
string public baseExtension = ".json";
uint256 public cost = 0 ether;
uint256 public maxSupply = 14976;
uint256 public maxMintAmount = 100;
bool public paused = false;
mapping(address => bool) public whitelisted;
constructor() ERC721("lemurin", "lem") {
setBaseURI("https://bafybeig3zkk4a5xy26x6twbynfstmjpvjfgq4htawi7winlrx5n5v4ilga.ipfs.w3s.link/");
}
function _baseURI() internal view virtual override returns (string memory) {
return baseURI;
}
function mint(address _to, uint256 _mintAmount) public payable {
uint256 supply = totalSupply();
require(!paused);
require(_mintAmount > 0);
require(_mintAmount <= maxMintAmount);
require(supply + _mintAmount <= maxSupply);
if (msg.sender != owner()) {
if(whitelisted[msg.sender] != true) {
require(msg.value >= cost * _mintAmount);
}
}
for (uint256 i = 1; i <= _mintAmount; i++) {
_safeMint(_to, supply + i);
}
}
function walletOfOwner(address _owner)
public
view
returns (uint256[] memory)
{
uint256 ownerTokenCount = balanceOf(_owner);
uint256[] memory tokenIds = new uint256[](ownerTokenCount);
for (uint256 i; i < ownerTokenCount; i++) {
tokenIds[i] = tokenOfOwnerByIndex(_owner, i);
}
return tokenIds;
}
function tokenURI(uint256 tokenId)
public
view
virtual
override
returns (string memory)
{
require(
_exists(tokenId),
"ERC721Metadata: URI query for nonexistent token"
);
string memory currentBaseURI = _baseURI();
return bytes(currentBaseURI).length > 0
? string(abi.encodePacked(currentBaseURI, tokenId.toString(), baseExtension))
: "";
}
function setCost(uint256 _newCost) public onlyOwner {
cost = _newCost;
}
function setmaxMintAmount(uint256 _newmaxMintAmount) public onlyOwner {
maxMintAmount = _newmaxMintAmount;
}
function setBaseURI(string memory _newBaseURI) public onlyOwner {
baseURI = _newBaseURI;
}
function setBaseExtension(string memory _newBaseExtension) public onlyOwner {
baseExtension = _newBaseExtension;
}
function pause(bool _state) public onlyOwner {
paused = _state;
}
function whitelistUser(address _user) public onlyOwner {
whitelisted[_user] = true;
}
function removeWhitelistUser(address _user) public onlyOwner {
whitelisted[_user] = false;
}
function withdraw() public payable onlyOwner {
(bool os, ) = payable(owner()).call{value: address(this).balance}("");
require(os);
}
}
Read Contract
balanceOf 0x70a08231 → uint256
baseExtension 0xc6682862 → string
baseURI 0x6c0360eb → string
cost 0x13faede6 → uint256
getApproved 0x081812fc → address
isApprovedForAll 0xe985e9c5 → bool
maxMintAmount 0x239c70ae → uint256
maxSupply 0xd5abeb01 → uint256
name 0x06fdde03 → string
owner 0x8da5cb5b → address
ownerOf 0x6352211e → address
paused 0x5c975abb → bool
supportsInterface 0x01ffc9a7 → bool
symbol 0x95d89b41 → string
tokenByIndex 0x4f6ccce7 → uint256
tokenOfOwnerByIndex 0x2f745c59 → uint256
tokenURI 0xc87b56dd → string
totalSupply 0x18160ddd → uint256
walletOfOwner 0x438b6300 → uint256[]
whitelisted 0xd936547e → bool
Write Contract 16 functions
These functions modify contract state and require a wallet transaction to execute.
approve 0x095ea7b3
address to
uint256 tokenId
mint 0x40c10f19
address _to
uint256 _mintAmount
pause 0x02329a29
bool _state
removeWhitelistUser 0x30cc7ae0
address _user
renounceOwnership 0x715018a6
No parameters
safeTransferFrom 0x42842e0e
address from
address to
uint256 tokenId
safeTransferFrom 0xb88d4fde
address from
address to
uint256 tokenId
bytes _data
setApprovalForAll 0xa22cb465
address operator
bool approved
setBaseExtension 0xda3ef23f
string _newBaseExtension
setBaseURI 0x55f804b3
string _newBaseURI
setCost 0x44a0d68a
uint256 _newCost
setmaxMintAmount 0x7f00c7a6
uint256 _newmaxMintAmount
transferFrom 0x23b872dd
address from
address to
uint256 tokenId
transferOwnership 0xf2fde38b
address newOwner
whitelistUser 0x4a4c560d
address _user
withdraw 0x3ccfd60b
No parameters
Recent Transactions
No transactions found for this address