Address Contract Partially Verified
Address
0x496299d8497A02b01f5Bc355298b0a831f06c522
Balance
0 ETH
Nonce
1
Code Size
14850 bytes
Creator
0xD87BC0fa...2EC6 at tx 0x5c0e6b0d...249737
Indexed Transactions
0
Contract Bytecode
14850 bytes
0x60806040526004361061036f5760003560e01c8063715018a6116101c6578063c7b89336116100f7578063dc92f8f011610095578063e985e9c51161006f578063e985e9c5146109eb578063f2fde38b14610a26578063f487c60214610a46578063f4a0a52814610a6657600080fd5b8063dc92f8f01461099e578063e47fa66e146109b3578063e8315742146109d557600080fd5b8063d311c80d116100d1578063d311c80d14610947578063d66359591461095d578063d9d2b4cd14610973578063dc30158b1461098857600080fd5b8063c7b89336146108e5578063c87b56dd14610912578063cb9fe5861461093257600080fd5b806395d89b4111610164578063a91f88351161013e578063a91f88351461087d578063b69ef8a814610892578063b88d4fde146108a5578063c1f730a4146108c557600080fd5b806395d89b41146108285780639d2087ff1461083d578063a22cb4651461085d57600080fd5b8063861a9a65116101a0578063861a9a65146107b95780638b2998f8146107d95780638bdc048a146107ee5780638da5cb5b1461080857600080fd5b8063715018a61461076f5780637362377b146107845780637cb647591461079957600080fd5b806330176e13116102a05780634959f0f51161023e5780636352211e116102185780636352211e146106d65780636817c76c1461070c5780636e9d287b1461072257806370a082311461074257600080fd5b80634959f0f51461068c578063524c7ff8146106a15780635a23dd99146106b657600080fd5b806340f480e71161027a57806340f480e71461060957806342842e0e1461061f578063438b63001461063f578063484b973c1461066c57600080fd5b806330176e13146105a957806339e96c7b146105c95780633a3473b6146105e957600080fd5b806323af31261161030d57806326202370116102e7578063262023701461054e5780632904e6d9146105635780632db11544146105765780632f745c591461058957600080fd5b806323af3126146104de57806323b872dd1461050e57806323ffce851461052e57600080fd5b8063081812fc11610349578063081812fc1461042c578063095ea7b31461047a57806318160ddd1461049a57806319c3fa32146104be57600080fd5b806301ffc9a7146103b357806302ffaed1146103e857806306fdde031461040a57600080fd5b366103ae57604080513381523460208201527f88a5966d370b9919b20f3e2c13ff65706f196a4e32cc2c12bf57088f88525874910160405180910390a1005b600080fd5b3480156103bf57600080fd5b506103d36103ce366004613436565b610a86565b60405190151581526020015b60405180910390f35b3480156103f457600080fd5b50610408610403366004613470565b610abd565b005b34801561041657600080fd5b5061041f610b33565b6040516103df91906136b8565b34801561043857600080fd5b5061046261044736600461341d565b6007602052600090815260409020546001600160a01b031681565b6040516001600160a01b0390911681526020016103df565b34801561048657600080fd5b50610408610495366004613257565b610bc1565b3480156104a657600080fd5b506104b060045481565b6040519081526020016103df565b3480156104ca57600080fd5b506104086104d9366004613401565b610ce5565b3480156104ea57600080fd5b506103d36104f9366004612f90565b60126020526000908152604090205460ff1681565b34801561051a57600080fd5b506104086105293660046130d6565b610d26565b34801561053a57600080fd5b50610408610549366004612f90565b610db1565b34801561055a57600080fd5b506103d3610dfd565b6104086105713660046133b6565b610e19565b61040861058436600461341d565b611074565b34801561059557600080fd5b506104b06105a4366004613257565b6111ca565b3480156105b557600080fd5b506104086105c4366004613470565b6111fb565b3480156105d557600080fd5b506104086105e436600461341d565b611264565b3480156105f557600080fd5b5061040861060436600461304e565b6112d9565b34801561061557600080fd5b506104b060155481565b34801561062b57600080fd5b5061040861063a3660046130d6565b611323565b34801561064b57600080fd5b5061065f61065a366004612f90565b61133e565b6040516103df9190613680565b34801561067857600080fd5b50610408610687366004613257565b611475565b34801561069857600080fd5b506104086114a9565b3480156106ad57600080fd5b5061065f611549565b3480156106c257600080fd5b506103d36106d1366004613176565b6117cb565b3480156106e257600080fd5b506104626106f136600461341d565b6005602052600090815260409020546001600160a01b031681565b34801561071857600080fd5b506104b060135481565b34801561072e57600080fd5b5061040861073d3660046132ee565b6118ef565b34801561074e57600080fd5b506104b061075d366004612f90565b60066020526000908152604090205481565b34801561077b57600080fd5b50610408611b15565b34801561079057600080fd5b50610408611b49565b3480156107a557600080fd5b506104086107b436600461341d565b611ced565b3480156107c557600080fd5b50601854610462906001600160a01b031681565b3480156107e557600080fd5b5061065f611d20565b3480156107fa57600080fd5b50600b546103d39060ff1681565b34801561081457600080fd5b50600954610462906001600160a01b031681565b34801561083457600080fd5b5061041f611d78565b34801561084957600080fd5b50610408610858366004613283565b611d85565b34801561086957600080fd5b50610408610878366004613222565b611e63565b34801561088957600080fd5b50610408611e6e565b34801561089e57600080fd5b50476104b0565b3480156108b157600080fd5b506104086108c0366004613117565b611eaa565b3480156108d157600080fd5b506104086108e0366004613401565b611f3c565b3480156108f157600080fd5b506104b0610900366004612f90565b60166020526000908152604090205481565b34801561091e57600080fd5b5061041f61092d36600461341d565b611f7d565b34801561093e57600080fd5b506103d361202b565b34801561095357600080fd5b506104b0600e5481565b34801561096957600080fd5b506104b0600c5481565b34801561097f57600080fd5b50610408612046565b34801561099457600080fd5b506104b060175481565b3480156109aa57600080fd5b50610408612105565b3480156109bf57600080fd5b506109c86121f2565b6040516103df9190613633565b3480156109e157600080fd5b506104b060145481565b3480156109f757600080fd5b506103d3610a06366004612fb4565b600860209081526000928352604080842090915290825290205460ff1681565b348015610a3257600080fd5b50610408610a41366004612f90565b612253565b348015610a5257600080fd5b50610408610a61366004612fed565b6122ec565b348015610a7257600080fd5b50610408610a8136600461341d565b61232e565b60006380ac58cd60e01b6001600160e01b031983161480610ab75750635b5e139f60e01b6001600160e01b03198316145b92915050565b6009546001600160a01b03163314610af05760405162461bcd60e51b8152600401610ae790613756565b60405180910390fd5b610b2f82828080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061235d92505050565b5050565b60008054610b40906138c9565b80601f0160208091040260200160405190810160405280929190818152602001828054610b6c906138c9565b8015610bb95780601f10610b8e57610100808354040283529160200191610bb9565b820191906000526020600020905b815481529060010190602001808311610b9c57829003601f168201915b505050505081565b6000818152600560205260409020546001600160a01b03908116908316811415610c415760405162461bcd60e51b815260206004820152602b60248201527f455243373231493a20617070726f766528292043616e6e6f7420617070726f7660448201526a6520796f757273656c662160a81b6064820152608401610ae7565b336001600160a01b0382161480610c7b57506001600160a01b038116600090815260086020908152604080832033845290915290205460ff165b610cd65760405162461bcd60e51b815260206004820152602660248201527f455243373231493a2043616c6c6572206e6f74206f776e6572206f7220417070604482015265726f7665642160d01b6064820152608401610ae7565b610ce08383612370565b505050565b6009546001600160a01b03163314610d0f5760405162461bcd60e51b8152600401610ae790613756565b600d805460ff1916831515179055600e8190555050565b6018546001600160a01b031615610da657601854604051635937322960e11b81526001600160a01b0385811660048301528481166024830152604482018490529091169063b26e645290606401600060405180830381600087803b158015610d8d57600080fd5b505af1158015610da1573d6000803e3d6000fd5b505050505b610ce08383836123f8565b6009546001600160a01b03163314610ddb5760405162461bcd60e51b8152600401610ae790613756565b601880546001600160a01b0319166001600160a01b0392909216919091179055565b600b5460009060ff168015610e14575042600c5411155b905090565b333214610e5e5760405162461bcd60e51b81526020600482015260136024820152724e6f20536d61727420436f6e7472616374732160681b6044820152606401610ae7565b600d5460ff168015610e72575042600e5411155b610ec95760405162461bcd60e51b815260206004820152602260248201527f57686974656c697374204d696e74206973206e6f7420656e61626c6564207965604482015261742160f01b6064820152608401610ae7565b610f06338484808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152506117cb92505050565b610f525760405162461bcd60e51b815260206004820152601860248201527f596f7520617265206e6f742057686974656c69737465642100000000000000006044820152606401610ae7565b33600090815260166020526040902054610f6d908290613824565b6015541015610ff35760405162461bcd60e51b815260206004820152604660248201527f4f766572204d6178204d696e747320706572205458206f72204e6f7420656e6f60448201527f7567682077686974656c697374206d696e74732072656d61696e696e6720666f6064820152657220796f752160d01b608482015260a401610ae7565b806013546110019190613850565b34146110455760405162461bcd60e51b8152602060048201526013602482015272496e76616c69642076616c75652073656e742160681b6044820152606401610ae7565b3360009081526016602052604081208054839290611064908490613824565b90915550610ce090503382612475565b3332146110b95760405162461bcd60e51b81526020600482015260136024820152724e6f20536d61727420436f6e7472616374732160681b6044820152606401610ae7565b600b5460ff1680156110cd575042600c5411155b6111195760405162461bcd60e51b815260206004820152601f60248201527f5075626c6963204d696e74206973206e6f7420656e61626c65642079657421006044820152606401610ae7565b80601754101561116b5760405162461bcd60e51b815260206004820152601b60248201527f4f766572206d61786d696d756d206d696e7473207065722054782100000000006044820152606401610ae7565b806013546111799190613850565b34146111bd5760405162461bcd60e51b8152602060048201526013602482015272496e76616c69642076616c75652073656e742160681b6044820152606401610ae7565b6111c73382612475565b50565b6000806111d68461133e565b90508083815181106111ea576111ea613975565b602002602001015191505092915050565b6009546001600160a01b031633146112255760405162461bcd60e51b8152600401610ae790613756565b610b2f82828080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061253492505050565b6009546001600160a01b0316331461128e5760405162461bcd60e51b8152600401610ae790613756565b8060045410156112d45760405162461bcd60e51b815260206004820152601160248201527042656c6f7720746f74616c537570706c7960781b6044820152606401610ae7565b601455565b60005b825181101561131c5761130a85858584815181106112fc576112fc613975565b602002602001015185611eaa565b8061131481613904565b9150506112dc565b5050505050565b610ce083838360405180602001604052806000815250611eaa565b6001600160a01b038116600090815260066020526040812054606091816001600160401b038111156113725761137261398b565b60405190808252806020026020018201604052801561139b578160200160208202803683370190505b50600454909150600090815b8181101561146a576000818152600560205260409020546001600160a01b03161580156113f75750836113db60018761386f565b815181106113eb576113eb613975565b60200260200101516000145b1561140a578161140681613904565b9250505b6000818152600560205260409020546001600160a01b0388811691161415611458578084848151811061143f5761143f613975565b60209081029190910101528261145481613904565b9350505b8061146281613904565b9150506113a7565b509195945050505050565b6009546001600160a01b0316331461149f5760405162461bcd60e51b8152600401610ae790613756565b610b2f8282612475565b600f546001600160a01b031633146114d35760405162461bcd60e51b8152600401610ae7906136cb565b601054156115135760108054806114ec576114ec61395f565b600082815260209020810160001990810180546001600160a01b03191690550190556114d3565b6011541561154757601180548061152c5761152c61395f565b60019003818190600052602060002001600090559055611513565b565b6009546060906001600160a01b031633146115765760405162461bcd60e51b8152600401610ae790613756565b60105415801590611588575060115415155b6115d45760405162461bcd60e51b815260206004820152601f60248201527f50617961626c6520676f7665726e616e6365206e6f74207365742079657421006044820152606401610ae7565b601154601054146115f75760405162461bcd60e51b8152600401610ae790613713565b6000805b601154811015611642576011818154811061161857611618613975565b90600052602060002001548261162e9190613824565b91508061163a81613904565b9150506115fb565b50806103e8146116645760405162461bcd60e51b8152600401610ae79061378b565b6010544790600090611677906002613824565b6001600160401b0381111561168e5761168e61398b565b6040519080825280602002602001820160405280156116b7578160200160208202803683370190505b50905060005b60105481101561172c576103e8601182815481106116dd576116dd613975565b9060005260206000200154846116f39190613850565b6116fd919061383c565b82828151811061170f5761170f613975565b60209081029190910101528061172481613904565b9150506116bd565b50601054815183918391811061174457611744613975565b60200260200101818152505060005b6010548110156117c35781818151811061176f5761176f613975565b602002602001015182601080549050600161178a9190613824565b8151811061179a5761179a613975565b602002602001018181516117ae9190613824565b905250806117bb81613904565b915050611753565b509250505090565b6040516bffffffffffffffffffffffff19606084901b166020820152600090819060340160405160208183030381529060405280519060200120905060005b83518110156118e35783818151811061182557611825613975565b602002602001015182106118835783818151811061184557611845613975565b602002602001015182604051602001611868929190918252602082015260400190565b604051602081830303815290604052805190602001206118cf565b8184828151811061189657611896613975565b60200260200101516040516020016118b8929190918252602082015260400190565b604051602081830303815290604052805190602001205b9150806118db81613904565b91505061180a565b50600a54149392505050565b600f546001600160a01b031633146119195760405162461bcd60e51b8152600401610ae7906136cb565b6010541580156119295750601154155b61199b5760405162461bcd60e51b815260206004820152603a60248201527f50617961626c6520476f7665726e616e636520616c726561647920736574212060448201527f546f2073657420616761696e2c207265736574206669727374210000000000006064820152608401610ae7565b80518251146119f85760405162461bcd60e51b815260206004820152602360248201527f4164647265737320616e6420536861726573206c656e677468206d69736d617460448201526263682160e81b6064820152608401610ae7565b6000805b8351811015611ac357828181518110611a1757611a17613975565b602002602001015182611a2a9190613824565b91506010848281518110611a4057611a40613975565b60209081029190910181015182546001810184556000938452919092200180546001600160a01b0319166001600160a01b039092169190911790558251601190849083908110611a9257611a92613975565b6020908102919091018101518254600181018455600093845291909220015580611abb81613904565b9150506119fc565b50806103e814610ce05760405162461bcd60e51b815260206004820152601960248201527f546f74616c20536861726573206973206e6f74203130303021000000000000006044820152606401610ae7565b6009546001600160a01b03163314611b3f5760405162461bcd60e51b8152600401610ae790613756565b6115476000612547565b6009546001600160a01b03163314611b735760405162461bcd60e51b8152600401610ae790613756565b60105415801590611b85575060115415155b611bd15760405162461bcd60e51b815260206004820152601f60248201527f50617961626c6520676f7665726e616e6365206e6f74207365742079657421006044820152606401610ae7565b60115460105414611bf45760405162461bcd60e51b8152600401610ae790613713565b6000805b601154811015611c3f5760118181548110611c1557611c15613975565b906000526020600020015482611c2b9190613824565b915080611c3781613904565b915050611bf8565b50806103e814611c615760405162461bcd60e51b8152600401610ae79061378b565b4760005b601054811015610ce05760006103e860118381548110611c8757611c87613975565b906000526020600020015484611c9d9190613850565b611ca7919061383c565b9050611cda60108381548110611cbf57611cbf613975565b6000918252602090912001546001600160a01b031682612599565b5080611ce581613904565b915050611c65565b6009546001600160a01b03163314611d175760405162461bcd60e51b8152600401610ae790613756565b6111c781600a55565b60606011805480602002602001604051908101604052809291908181526020018280548015611d6e57602002820191906000526020600020905b815481526020019060010190808311611d5a575b5050505050905090565b60018054610b40906138c9565b6009546001600160a01b03163314611daf5760405162461bcd60e51b8152600401610ae790613756565b828114611dfe5760405162461bcd60e51b815260206004820152601760248201527f4172726179206c656e67746873206d69736d61746368210000000000000000006044820152606401610ae7565b60005b8381101561131c57611e51858583818110611e1e57611e1e613975565b9050602002016020810190611e339190612f90565b848484818110611e4557611e45613975565b90506020020135612475565b80611e5b81613904565b915050611e01565b610b2f33838361262e565b600f546001600160a01b03163314611e985760405162461bcd60e51b8152600401610ae7906136cb565b600f80546001600160a01b0319169055565b6018546001600160a01b031615611f2a57601854604051635937322960e11b81526001600160a01b0386811660048301528581166024830152604482018590529091169063b26e645290606401600060405180830381600087803b158015611f1157600080fd5b505af1158015611f25573d6000803e3d6000fd5b505050505b611f3684848484612723565b50505050565b6009546001600160a01b03163314611f665760405162461bcd60e51b8152600401610ae790613756565b600b805460ff1916831515179055600c8190555050565b6000818152600560205260409020546060906001600160a01b0316611ff65760405162461bcd60e51b815260206004820152602960248201527f455243373231493a20746f6b656e555249282920546f6b656e20646f6573206e6044820152686f742065786973742160b81b6064820152608401610ae7565b600261200183612881565b6003604051602001612015939291906135c3565b6040516020818303038152906040529050919050565b600d5460009060ff168015610e14575042600e541115905090565b6000805b60105481101561209a576010818154811061206757612067613975565b6000918252602090912001546001600160a01b031633141561208857600191505b8061209281613904565b91505061204a565b50806120e85760405162461bcd60e51b815260206004820152601a60248201527f596f7520617265206e6f742061207368617265686f6c646572210000000000006044820152606401610ae7565b50336000908152601260205260409020805460ff19166001179055565b6009546001600160a01b0316331461212f5760405162461bcd60e51b8152600401610ae790613756565b60005b6010548110156121e757601260006010838154811061215357612153613975565b60009182526020808320909101546001600160a01b0316835282019290925260400190205460ff166121d55760405162461bcd60e51b815260206004820152602560248201527f456d657267656e63792046756e6374696f6e7320617265206e6f7420756e6c6f604482015264636b65642160d81b6064820152608401610ae7565b806121df81613904565b915050612132565b506115473347612599565b60606010805480602002602001604051908101604052809291908181526020018280548015611d6e57602002820191906000526020600020905b81546001600160a01b0316815260019091019060200180831161222c575050505050905090565b6009546001600160a01b0316331461227d5760405162461bcd60e51b8152600401610ae790613756565b6001600160a01b0381166122e35760405162461bcd60e51b815260206004820152602760248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f20616044820152666464726573732160c81b6064820152608401610ae7565b6111c781612547565b60005b8151811015611f365761231c848484848151811061230f5761230f613975565b6020026020010151610d26565b8061232681613904565b9150506122ef565b6009546001600160a01b031633146123585760405162461bcd60e51b8152600401610ae790613756565b601355565b8051610b2f906003906020840190612db6565b6000818152600760205260409020546001600160a01b03838116911614610b2f57600081815260076020908152604080832080546001600160a01b0319166001600160a01b038781169182179092556005909352818420549151859492909116917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591a45050565b6124023382612987565b61246a5760405162461bcd60e51b815260206004820152603360248201527f455243373231493a207472616e7366657246726f6d2829205f6973417070726f6044820152727665644f724f776e6572203d2066616c73652160681b6064820152608401610ae7565b610ce0838383612a82565b806004546124839190613824565b60145410156124d45760405162461bcd60e51b815260206004820152601c60248201527f4e6f7420656e6f75676820746f6b656e732072656d61696e696e6721000000006044820152606401610ae7565b600060045460016124e59190613824565b905060005b8281101561251757612505846125008385613824565b612c54565b8061250f81613904565b9150506124ea565b50816004600082825461252a9190613824565b9091555050505050565b8051610b2f906002906020840190612db6565b600980546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6000826001600160a01b03168260405160006040518083038185875af1925050503d80600081146125e6576040519150601f19603f3d011682016040523d82523d6000602084013e6125eb565b606091505b5050905080610ce05760405162461bcd60e51b815260206004820152600f60248201526e151c985b9cd9995c8819985a5b1959608a1b6044820152606401610ae7565b816001600160a01b0316836001600160a01b031614156126b65760405162461bcd60e51b815260206004820152603d60248201527f455243373231493a205f736574417070726f76616c466f72416c6c2829204f7760448201527f6e6572206d757374206e6f7420626520746865204f70657261746f72210000006064820152608401610ae7565b6001600160a01b03838116600081815260086020908152604080832094871680845294825291829020805460ff191686151590811790915591519182527f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a3505050565b61272e848484610d26565b6001600160a01b0383163b15611f36576000836001600160a01b031663150b7a023387868660405160240161276694939291906135f6565b6040516020818303038152906040529060e01b6020820180516001600160e01b03838183161783525050505060405161279f91906135a7565b600060405180830381855afa9150503d80600081146127da576040519150601f19603f3d011682016040523d82523d6000602084013e6127df565b606091505b509150506000818060200190518101906127f99190613453565b9050630a85bd0160e11b6001600160e01b03198216146128795760405162461bcd60e51b815260206004820152603560248201527f455243373231493a20736166655472616e7366657246726f6d282920746f5f206044820152746e6f742045524337323152656365697661626c652160581b6064820152608401610ae7565b505050505050565b6060816128a55750506040805180820190915260018152600360fc1b602082015290565b8160005b81156128cf57806128b981613904565b91506128c89050600a8361383c565b91506128a9565b6000816001600160401b038111156128e9576128e961398b565b6040519080825280601f01601f191660200182016040528015612913576020820181803683370190505b5090505b841561297f5781612927816138b2565b92506129369050600a8661391f565b612941906030613824565b60f81b81838151811061295657612956613975565b60200101906001600160f81b031916908160001a905350612978600a8661383c565b9450612917565b949350505050565b6000818152600560205260408120546001600160a01b0316612a085760405162461bcd60e51b815260206004820152603460248201527f455243373231493a205f6973417070726f7665644f724f776e65722829204f776044820152736e6572206973205a65726f20416464726573732160601b6064820152608401610ae7565b6000828152600560205260409020546001600160a01b03908116908416811480612a4b57506000838152600760205260409020546001600160a01b038581169116145b8061297f57506001600160a01b0380821660009081526008602090815260408083209388168352929052205460ff16949350505050565b6000818152600560205260409020546001600160a01b03848116911614612b055760405162461bcd60e51b815260206004820152603160248201527f455243373231493a205f7472616e736665722829205472616e73666572204e6f60448201527074204f776e6572206f6620546f6b656e2160781b6064820152608401610ae7565b6001600160a01b038216612b725760405162461bcd60e51b815260206004820152602e60248201527f455243373231493a205f7472616e736665722829205472616e7366657220746f60448201526d205a65726f20416464726573732160901b6064820152608401610ae7565b6000818152600760205260409020546001600160a01b031615612b9a57612b9a600082612370565b600081815260056020908152604080832080546001600160a01b0319166001600160a01b03878116919091179091558616835260069091528120805491612be0836138b2565b90915550506001600160a01b0382166000908152600660205260408120805491612c0983613904565b919050555080826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b6001600160a01b038216612cb85760405162461bcd60e51b815260206004820152602560248201527f455243373231493a205f6d696e742829204d696e7420746f205a65726f204164604482015264647265737360d81b6064820152608401610ae7565b6000818152600560205260409020546001600160a01b031615612d345760405162461bcd60e51b815260206004820152602e60248201527f455243373231493a205f6d696e74282920546f6b656e20746f204d696e74204160448201526d6c7265616479204578697374732160901b6064820152608401610ae7565b6001600160a01b0382166000908152600660205260408120805491612d5883613904565b909155505060008181526005602052604080822080546001600160a01b0319166001600160a01b03861690811790915590518392907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a45050565b828054612dc2906138c9565b90600052602060002090601f016020900481019282612de45760008555612e2a565b82601f10612dfd57805160ff1916838001178555612e2a565b82800160010185558215612e2a579182015b82811115612e2a578251825591602001919060010190612e0f565b50612e36929150612e3a565b5090565b5b80821115612e365760008155600101612e3b565b60008083601f840112612e6157600080fd5b5081356001600160401b03811115612e7857600080fd5b6020830191508360208260051b8501011115612e9357600080fd5b9250929050565b600082601f830112612eab57600080fd5b81356020612ec0612ebb83613801565b6137d1565b80838252828201915082860187848660051b8901011115612ee057600080fd5b60005b85811015612eff57813584529284019290840190600101612ee3565b5090979650505050505050565b80358015158114612f1c57600080fd5b919050565b600082601f830112612f3257600080fd5b81356001600160401b03811115612f4b57612f4b61398b565b612f5e601f8201601f19166020016137d1565b818152846020838601011115612f7357600080fd5b816020850160208301376000918101602001919091529392505050565b600060208284031215612fa257600080fd5b8135612fad816139a1565b9392505050565b60008060408385031215612fc757600080fd5b8235612fd2816139a1565b91506020830135612fe2816139a1565b809150509250929050565b60008060006060848603121561300257600080fd5b833561300d816139a1565b9250602084013561301d816139a1565b915060408401356001600160401b0381111561303857600080fd5b61304486828701612e9a565b9150509250925092565b6000806000806080858703121561306457600080fd5b843561306f816139a1565b9350602085013561307f816139a1565b925060408501356001600160401b038082111561309b57600080fd5b6130a788838901612e9a565b935060608701359150808211156130bd57600080fd5b506130ca87828801612f21565b91505092959194509250565b6000806000606084860312156130eb57600080fd5b83356130f6816139a1565b92506020840135613106816139a1565b929592945050506040919091013590565b6000806000806080858703121561312d57600080fd5b8435613138816139a1565b93506020850135613148816139a1565b92506040850135915060608501356001600160401b0381111561316a57600080fd5b6130ca87828801612f21565b6000806040838503121561318957600080fd5b8235613194816139a1565b91506020838101356001600160401b038111156131b057600080fd5b8401601f810186136131c157600080fd5b80356131cf612ebb82613801565b80828252848201915084840189868560051b87010111156131ef57600080fd5b600094505b838510156132125780358352600194909401939185019185016131f4565b5080955050505050509250929050565b6000806040838503121561323557600080fd5b8235613240816139a1565b915061324e60208401612f0c565b90509250929050565b6000806040838503121561326a57600080fd5b8235613275816139a1565b946020939093013593505050565b6000806000806040858703121561329957600080fd5b84356001600160401b03808211156132b057600080fd5b6132bc88838901612e4f565b909650945060208701359150808211156132d557600080fd5b506132e287828801612e4f565b95989497509550505050565b6000806040838503121561330157600080fd5b82356001600160401b038082111561331857600080fd5b818501915085601f83011261332c57600080fd5b8135602061333c612ebb83613801565b8083825282820191508286018a848660051b890101111561335c57600080fd5b600096505b84871015613388578035613374816139a1565b835260019690960195918301918301613361565b509650508601359250508082111561339f57600080fd5b506133ac85828601612e9a565b9150509250929050565b6000806000604084860312156133cb57600080fd5b83356001600160401b038111156133e157600080fd5b6133ed86828701612e4f565b909790965060209590950135949350505050565b6000806040838503121561341457600080fd5b61327583612f0c565b60006020828403121561342f57600080fd5b5035919050565b60006020828403121561344857600080fd5b8135612fad816139b6565b60006020828403121561346557600080fd5b8151612fad816139b6565b6000806020838503121561348357600080fd5b82356001600160401b038082111561349a57600080fd5b818501915085601f8301126134ae57600080fd5b8135818111156134bd57600080fd5b8660208285010111156134cf57600080fd5b60209290920196919550909350505050565b600081518084526134f9816020860160208601613886565b601f01601f19169290920160200192915050565b8054600090600181811c908083168061352757607f831692505b602080841082141561354957634e487b7160e01b600052602260045260246000fd5b81801561355d576001811461356e5761359b565b60ff1986168952848901965061359b565b60008881526020902060005b868110156135935781548b82015290850190830161357a565b505084890196505b50505050505092915050565b600082516135b9818460208701613886565b9190910192915050565b60006135cf828661350d565b84516135df818360208901613886565b6135eb8183018661350d565b979650505050505050565b6001600160a01b0385811682528416602082015260408101839052608060608201819052600090613629908301846134e1565b9695505050505050565b6020808252825182820181905260009190848201906040850190845b818110156136745783516001600160a01b03168352928401929184019160010161364f565b50909695505050505050565b6020808252825182820181905260009190848201906040850190845b818110156136745783518352928401929184019160010161369c565b602081526000612fad60208301846134e1565b60208082526028908201527f50617961626c65476f7665726e616e63653a2043616c6c6572206973206e6f74604082015267205365747465722160c01b606082015260800190565b60208082526023908201527f50617961626c6520676f7665726e616e6365206c656e677468206d69736d617460408201526263682160e81b606082015260800190565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b60208082526026908201527f50617961626c6520476f7665726e616e636520536861726573206973206e6f7460408201526520313030302160d01b606082015260800190565b604051601f8201601f191681016001600160401b03811182821017156137f9576137f961398b565b604052919050565b60006001600160401b0382111561381a5761381a61398b565b5060051b60200190565b6000821982111561383757613837613933565b500190565b60008261384b5761384b613949565b500490565b600081600019048311821515161561386a5761386a613933565b500290565b60008282101561388157613881613933565b500390565b60005b838110156138a1578181015183820152602001613889565b83811115611f365750506000910152565b6000816138c1576138c1613933565b506000190190565b600181811c908216806138dd57607f821691505b602082108114156138fe57634e487b7160e01b600052602260045260246000fd5b50919050565b600060001982141561391857613918613933565b5060010190565b60008261392e5761392e613949565b500690565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052601260045260246000fd5b634e487b7160e01b600052603160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052604160045260246000fd5b6001600160a01b03811681146111c757600080fd5b6001600160e01b0319811681146111c757600080fdfea264697066735822122097b68da279f38edfa74254463fc53a99bebdef28dc9a7f58ff02073adce01cbe64736f6c63430008070033
Verified Source Code Partial Match
Compiler: v0.8.7+commit.e28d00a7
EVM: london
Optimization: Yes (200 runs)
AscendedNFT.sol 514 lines
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;
/* ERC721I - ERC721I (ERC721 0xInuarashi Edition) - Gas Optimized
Author: 0xInuarashi || https://twitter.com/0xinuarashi
Open Source: with the efforts of the [0x Collective] <3 */
contract ERC721I {
string public name; string public symbol;
string internal baseTokenURI; string internal baseTokenURI_EXT;
constructor(string memory name_, string memory symbol_) { name = name_; symbol = symbol_; }
uint256 public totalSupply;
mapping(uint256 => address) public ownerOf;
mapping(address => uint256) public balanceOf;
mapping(uint256 => address) public getApproved;
mapping(address => mapping(address => bool)) public isApprovedForAll;
// Events
event Transfer(address indexed from, address indexed to, uint256 indexed tokenId);
event Mint(address indexed to, uint256 tokenId);
event Approval(address indexed owner, address indexed approved, uint256 indexed tokenId);
event ApprovalForAll(address indexed owner, address indexed operator, bool approved);
// // internal write functions
// mint
function _mint(address to_, uint256 tokenId_) internal virtual {
require(to_ != address(0x0), "ERC721I: _mint() Mint to Zero Address");
require(ownerOf[tokenId_] == address(0x0), "ERC721I: _mint() Token to Mint Already Exists!");
// ERC721I Starts Here
balanceOf[to_]++;
ownerOf[tokenId_] = to_;
// totalSupply++; // I removed this for a bit better gas management on multi-mints ~ 0xInuarashi
// ERC721I Ends Here
emit Transfer(address(0x0), to_, tokenId_);
// emit Mint(to_, tokenId_); // I removed this for a bit better gas management on multi-mints ~ 0xInuarashi
}
// transfer
function _transfer(address from_, address to_, uint256 tokenId_) internal virtual {
require(from_ == ownerOf[tokenId_], "ERC721I: _transfer() Transfer Not Owner of Token!");
require(to_ != address(0x0), "ERC721I: _transfer() Transfer to Zero Address!");
// ERC721I Starts Here
// checks if there is an approved address clears it if there is
if (getApproved[tokenId_] != address(0x0)) {
_approve(address(0x0), tokenId_);
}
ownerOf[tokenId_] = to_;
balanceOf[from_]--;
balanceOf[to_]++;
// ERC721I Ends Here
emit Transfer(from_, to_, tokenId_);
}
// approve
function _approve(address to_, uint256 tokenId_) internal virtual {
if (getApproved[tokenId_] != to_) {
getApproved[tokenId_] = to_;
emit Approval(ownerOf[tokenId_], to_, tokenId_);
}
}
function _setApprovalForAll(address owner_, address operator_, bool approved_) internal virtual {
require(owner_ != operator_, "ERC721I: _setApprovalForAll() Owner must not be the Operator!");
isApprovedForAll[owner_][operator_] = approved_;
emit ApprovalForAll(owner_, operator_, approved_);
}
// token uri
function _setBaseTokenURI(string memory uri_) internal virtual {
baseTokenURI = uri_;
}
function _setBaseTokenURI_EXT(string memory ext_) internal virtual {
baseTokenURI_EXT = ext_;
}
// // Internal View Functions
// Embedded Libraries
function _toString(uint256 value_) internal pure returns (string memory) {
if (value_ == 0) { return "0"; }
uint256 _iterate = value_; uint256 _digits;
while (_iterate != 0) { _digits++; _iterate /= 10; } // get digits in value_
bytes memory _buffer = new bytes(_digits);
while (value_ != 0) { _digits--; _buffer[_digits] = bytes1(uint8(48 + uint256(value_ % 10 ))); value_ /= 10; } // create bytes of value_
return string(_buffer); // return string converted bytes of value_
}
// Functional Views
function _isApprovedOrOwner(address spender_, uint256 tokenId_) internal view virtual returns (bool) {
require(ownerOf[tokenId_] != address(0x0), "ERC721I: _isApprovedOrOwner() Owner is Zero Address!");
address _owner = ownerOf[tokenId_];
return (spender_ == _owner || spender_ == getApproved[tokenId_] || isApprovedForAll[_owner][spender_]);
}
function _exists(uint256 tokenId_) internal view virtual returns (bool) {
return ownerOf[tokenId_] != address(0x0);
}
// // public write functions
function approve(address to_, uint256 tokenId_) public virtual {
address _owner = ownerOf[tokenId_];
require(to_ != _owner, "ERC721I: approve() Cannot approve yourself!");
require(msg.sender == _owner || isApprovedForAll[_owner][msg.sender], "ERC721I: Caller not owner or Approved!");
_approve(to_, tokenId_);
}
function setApprovalForAll(address operator_, bool approved_) public virtual {
_setApprovalForAll(msg.sender, operator_, approved_);
}
function transferFrom(address from_, address to_, uint256 tokenId_) public virtual {
require(_isApprovedOrOwner(msg.sender, tokenId_), "ERC721I: transferFrom() _isApprovedOrOwner = false!");
_transfer(from_, to_, tokenId_);
}
function safeTransferFrom(address from_, address to_, uint256 tokenId_, bytes memory data_) public virtual {
transferFrom(from_, to_, tokenId_);
if (to_.code.length != 0) {
(, bytes memory _returned) = to_.staticcall(abi.encodeWithSelector(0x150b7a02, msg.sender, from_, tokenId_, data_));
bytes4 _selector = abi.decode(_returned, (bytes4));
require(_selector == 0x150b7a02, "ERC721I: safeTransferFrom() to_ not ERC721Receivable!");
}
}
function safeTransferFrom(address from_, address to_, uint256 tokenId_) public virtual {
safeTransferFrom(from_, to_, tokenId_, "");
}
// 0xInuarashi Custom Functions
function multiTransferFrom(address from_, address to_, uint256[] memory tokenIds_) public virtual {
for (uint256 i = 0; i < tokenIds_.length; i++) {
transferFrom(from_, to_, tokenIds_[i]);
}
}
function multiSafeTransferFrom(address from_, address to_, uint256[] memory tokenIds_, bytes memory data_) public virtual {
for (uint256 i = 0; i < tokenIds_.length; i++) {
safeTransferFrom(from_, to_, tokenIds_[i], data_);
}
}
// OZ Standard Stuff
function supportsInterface(bytes4 interfaceId_) public pure returns (bool) {
return (interfaceId_ == 0x80ac58cd || interfaceId_ == 0x5b5e139f);
}
function tokenURI(uint256 tokenId_) public view virtual returns (string memory) {
require(ownerOf[tokenId_] != address(0x0), "ERC721I: tokenURI() Token does not exist!");
return string(abi.encodePacked(baseTokenURI, _toString(tokenId_), baseTokenURI_EXT));
}
// // public view functions
// never use these for functions ever, they are expensive af and for view only (this will be an issue in the future for interfaces)
function walletOfOwner(address address_) public virtual view returns (uint256[] memory) {
uint256 _balance = balanceOf[address_];
uint256[] memory _tokens = new uint256[] (_balance);
uint256 _index;
uint256 _loopThrough = totalSupply;
for (uint256 i = 0; i < _loopThrough; i++) {
if (ownerOf[i] == address(0x0) && _tokens[_balance - 1] == 0) { _loopThrough++; }
if (ownerOf[i] == address_) { _tokens[_index] = i; _index++; }
}
return _tokens;
}
// so not sure when this will ever be really needed but it conforms to erc721 enumerable
function tokenOfOwnerByIndex(address address_, uint256 index_) public virtual view returns (uint256) {
uint256[] memory _wallet = walletOfOwner(address_);
return _wallet[index_];
}
}
abstract contract Ownable {
address public owner;
event OwnershipTransferred(address indexed oldOwner_, address indexed newOwner_);
constructor() { owner = msg.sender; }
modifier onlyOwner {
require(owner == msg.sender, "Ownable: caller is not the owner");
_;
}
function _transferOwnership(address newOwner_) internal virtual {
address _oldOwner = owner;
owner = newOwner_;
emit OwnershipTransferred(_oldOwner, newOwner_);
}
function transferOwnership(address newOwner_) public virtual onlyOwner {
require(newOwner_ != address(0x0), "Ownable: new owner is the zero address!");
_transferOwnership(newOwner_);
}
function renounceOwnership() public virtual onlyOwner {
_transferOwnership(address(0x0));
}
}
abstract contract MerkleWhitelist {
bytes32 internal _merkleRoot;
function _setMerkleRoot(bytes32 merkleRoot_) internal virtual {
_merkleRoot = merkleRoot_;
}
function isWhitelisted(address address_, bytes32[] memory proof_) public view returns (bool) {
bytes32 _leaf = keccak256(abi.encodePacked(address_));
for (uint256 i = 0; i < proof_.length; i++) {
_leaf = _leaf < proof_[i] ? keccak256(abi.encodePacked(_leaf, proof_[i])) : keccak256(abi.encodePacked(proof_[i], _leaf));
}
return _leaf == _merkleRoot;
}
}
abstract contract Security {
// Prevent Smart Contracts
modifier onlySender {
require(msg.sender == tx.origin, "No Smart Contracts!"); _; }
}
abstract contract PublicMint {
// Public Minting
bool public _publicMintEnabled; uint256 public _publicMintTime;
function _setPublicMint(bool bool_, uint256 time_) internal {
_publicMintEnabled = bool_; _publicMintTime = time_; }
modifier publicMintEnabled {
require(_publicMintEnabled && _publicMintTime <= block.timestamp,
"Public Mint is not enabled yet!"); _; }
function publicMintStatus() external view returns (bool) {
return _publicMintEnabled && _publicMintTime <= block.timestamp; }
}
abstract contract WhitelistMint {
// Whitelist Minting
bool internal _whitelistMintEnabled; uint256 public _whitelistMintTime;
function _setWhitelistMint(bool bool_, uint256 time_) internal {
_whitelistMintEnabled = bool_; _whitelistMintTime = time_; }
modifier whitelistMintEnabled {
require(_whitelistMintEnabled && _whitelistMintTime <= block.timestamp,
"Whitelist Mint is not enabled yet!"); _; }
function whitelistMintStatus() external view returns (bool) {
return _whitelistMintEnabled && _whitelistMintTime <= block.timestamp; }
}
// Open0x Presets //
// ERC721I_OW (ERC721I 0xInuarashi Edition, Ownable, Whitelist)
abstract contract ERC721I_OW is ERC721I, Ownable, MerkleWhitelist, Security, PublicMint, WhitelistMint {
constructor(string memory name_, string memory symbol_) ERC721I(name_, symbol_) {}
// Ownable Functions for ERC721I_OW //
// Token URI
function setBaseTokenURI(string calldata uri_) external onlyOwner {
_setBaseTokenURI(uri_);
}
function setBaseTokenURI_EXT(string calldata ext_) external onlyOwner {
_setBaseTokenURI_EXT(ext_);
}
// MerkleRoot
function setMerkleRoot(bytes32 merkleRoot_) external onlyOwner {
_setMerkleRoot(merkleRoot_);
}
// Public Mint
function setPublicMint(bool bool_, uint256 time_) external onlyOwner {
_setPublicMint(bool_, time_);
}
// Whitelist Mint
function setWhitelistMint(bool bool_, uint256 time_) external onlyOwner {
_setWhitelistMint(bool_, time_);
}
}
abstract contract PayableGovernance is Ownable {
// Special Access
address _payableGovernanceSetter;
constructor() payable { _payableGovernanceSetter = msg.sender; }
modifier onlyPayableGovernanceSetter {
require(msg.sender == _payableGovernanceSetter, "PayableGovernance: Caller is not Setter!"); _; }
function reouncePayableGovernancePermissions() public onlyPayableGovernanceSetter {
_payableGovernanceSetter = address(0x0); }
// Receivable Fallback
event Received(address from, uint amount);
receive() external payable { emit Received(msg.sender, msg.value); }
// Required Variables
address payable[] internal _payableGovernanceAddresses;
uint256[] internal _payableGovernanceShares;
mapping(address => bool) public addressToEmergencyUnlocked;
// Withdraw Functionality
function _withdraw(address payable address_, uint256 amount_) internal {
(bool success, ) = payable(address_).call{value: amount_}("");
require(success, "Transfer failed");
}
// Governance Functions
function setPayableGovernanceShareholders(address payable[] memory addresses_, uint256[] memory shares_) public onlyPayableGovernanceSetter {
require(_payableGovernanceAddresses.length == 0 && _payableGovernanceShares.length == 0, "Payable Governance already set! To set again, reset first!");
require(addresses_.length == shares_.length, "Address and Shares length mismatch!");
uint256 _totalShares;
for (uint256 i = 0; i < addresses_.length; i++) {
_totalShares += shares_[i];
_payableGovernanceAddresses.push(addresses_[i]);
_payableGovernanceShares.push(shares_[i]);
}
require(_totalShares == 1000, "Total Shares is not 1000!");
}
function resetPayableGovernanceShareholders() public onlyPayableGovernanceSetter {
while (_payableGovernanceAddresses.length != 0) {
_payableGovernanceAddresses.pop(); }
while (_payableGovernanceShares.length != 0) {
_payableGovernanceShares.pop(); }
}
// Governance View Functions
function balance() public view returns (uint256) {
return address(this).balance;
}
function payableGovernanceAddresses() public view returns (address payable[] memory) {
return _payableGovernanceAddresses;
}
function payableGovernanceShares() public view returns (uint256[] memory) {
return _payableGovernanceShares;
}
// Withdraw Functions
function withdrawEther() public onlyOwner {
// require that there has been payable governance set.
require(_payableGovernanceAddresses.length > 0 && _payableGovernanceShares.length > 0, "Payable governance not set yet!");
// this should never happen
require(_payableGovernanceAddresses.length == _payableGovernanceShares.length, "Payable governance length mismatch!");
// now, we check that the governance shares equal to 1000.
uint256 _totalPayableShares;
for (uint256 i = 0; i < _payableGovernanceShares.length; i++) {
_totalPayableShares += _payableGovernanceShares[i]; }
require(_totalPayableShares == 1000, "Payable Governance Shares is not 1000!");
// // now, we start the withdrawal process if all conditionals pass
// store current balance in local memory
uint256 _totalETH = address(this).balance;
// withdraw loop for payable governance
for (uint256 i = 0; i < _payableGovernanceAddresses.length; i++) {
uint256 _ethToWithdraw = ((_totalETH * _payableGovernanceShares[i]) / 1000);
_withdraw(_payableGovernanceAddresses[i], _ethToWithdraw);
}
}
function viewWithdrawAmounts() public view onlyOwner returns (uint256[] memory) {
// require that there has been payable governance set.
require(_payableGovernanceAddresses.length > 0 && _payableGovernanceShares.length > 0, "Payable governance not set yet!");
// this should never happen
require(_payableGovernanceAddresses.length == _payableGovernanceShares.length, "Payable governance length mismatch!");
// now, we check that the governance shares equal to 1000.
uint256 _totalPayableShares;
for (uint256 i = 0; i < _payableGovernanceShares.length; i++) {
_totalPayableShares += _payableGovernanceShares[i]; }
require(_totalPayableShares == 1000, "Payable Governance Shares is not 1000!");
// // now, we start the array creation process if all conditionals pass
// store current balance in local memory and instantiate array for input
uint256 _totalETH = address(this).balance;
uint256[] memory _withdrawals = new uint256[] (_payableGovernanceAddresses.length + 2);
// array creation loop for payable governance values
for (uint256 i = 0; i < _payableGovernanceAddresses.length; i++) {
_withdrawals[i] = ( (_totalETH * _payableGovernanceShares[i]) / 1000 );
}
// push two last array spots as total eth and added eths of withdrawals
_withdrawals[_payableGovernanceAddresses.length] = _totalETH;
for (uint256 i = 0; i < _payableGovernanceAddresses.length; i++) {
_withdrawals[_payableGovernanceAddresses.length + 1] += _withdrawals[i]; }
// return the final array data
return _withdrawals;
}
// Shareholder Governance
modifier onlyShareholder {
bool _isShareholder;
for (uint256 i = 0; i < _payableGovernanceAddresses.length; i++) {
if (msg.sender == _payableGovernanceAddresses[i]) {
_isShareholder = true;
}
}
require(_isShareholder, "You are not a shareholder!");
_;
}
function unlockEmergencyFunctionsAsShareholder() public onlyShareholder {
addressToEmergencyUnlocked[msg.sender] = true;
}
// Emergency Functions
modifier onlyEmergency {
for (uint256 i = 0; i < _payableGovernanceAddresses.length; i++) {
require(addressToEmergencyUnlocked[_payableGovernanceAddresses[i]], "Emergency Functions are not unlocked!");
}
_;
}
function emergencyWithdrawEther() public onlyOwner onlyEmergency {
_withdraw(payable(msg.sender), address(this).balance);
}
}
interface iYield {
function updateRewardOnTransfer(address from_, address to_, uint256 tokenId_) external;
}
contract AscendedNFT is ERC721I_OW, PayableGovernance {
constructor() payable ERC721I_OW("Ascended NFT", "ASCENDED") {}
// Project Contraints
uint256 public mintPrice = 0.08 ether;
uint256 public maxTokens = 8888;
uint256 public maxMintsPerWl = 4;
mapping(address => uint256) public addressToWlMints;
uint256 public maxMintsPerTx = 10;
function setMintPrice(uint256 mintPrice_) external onlyOwner {
mintPrice = mintPrice_;
}
function setMaxtokens(uint256 maxTokens_) external onlyOwner {
require(totalSupply >= maxTokens_, "Below totalSupply");
maxTokens = maxTokens_;
}
// Setting Future-Proof Token Yield
iYield public Yield;
function setYieldToken(address address_) external onlyOwner {
Yield = iYield(address_);
}
// Internal Mint
function _mintMany(address to_, uint256 amount_) internal {
require(maxTokens >= totalSupply + amount_,
"Not enough tokens remaining!");
uint256 _startId = totalSupply + 1; // iterate from 1
for (uint256 i = 0; i < amount_; i++) {
_mint(to_, _startId + i);
}
totalSupply += amount_;
}
// Owner Mint Functions
function ownerMint(address to_, uint256 amount_) external onlyOwner {
_mintMany(to_, amount_);
}
function ownerMintToMany(address[] calldata tos_, uint256[] calldata amounts_)
external onlyOwner {
require(tos_.length == amounts_.length,
"Array lengths mismatch!");
for (uint256 i = 0; i < tos_.length; i++) {
_mintMany(tos_[i], amounts_[i]);
}
}
// Whitelist Mint Functions
function whitelistMint(bytes32[] calldata proof_, uint256 amount_) external payable
onlySender whitelistMintEnabled {
require(isWhitelisted(msg.sender, proof_),
"You are not Whitelisted!");
require(maxMintsPerWl >= addressToWlMints[msg.sender] + amount_,
"Over Max Mints per TX or Not enough whitelist mints remaining for you!");
require(msg.value == mintPrice * amount_,
"Invalid value sent!");
// Add address to WL minted
addressToWlMints[msg.sender] += amount_;
_mintMany(msg.sender, amount_);
}
// Public Mint Functions
function publicMint(uint256 amount_) external payable onlySender publicMintEnabled {
require(maxMintsPerTx >= amount_,
"Over maxmimum mints per Tx!");
require(msg.value == mintPrice * amount_,
"Invalid value sent!");
_mintMany(msg.sender, amount_);
}
/////////////////////////////////////////////////////
// Withdraw Functions handled by PayableGovernance //
/////////////////////////////////////////////////////
// Future-Proof Transfer Hook Yield Overrides
function transferFrom(address from_, address to_, uint256 tokenId_) public
override {
if ( Yield != iYield(address(0x0)) ) {
Yield.updateRewardOnTransfer(from_, to_, tokenId_);
}
ERC721I.transferFrom(from_, to_, tokenId_);
}
function safeTransferFrom(address from_, address to_, uint256 tokenId_,
bytes memory data_) public override {
if ( Yield != iYield(address(0x0)) ) {
Yield.updateRewardOnTransfer(from_, to_, tokenId_);
}
ERC721I.safeTransferFrom(from_, to_, tokenId_, data_);
}
}
Read Contract
Yield 0x861a9a65 → address
_publicMintEnabled 0x8bdc048a → bool
_publicMintTime 0xd6635959 → uint256
_whitelistMintTime 0xd311c80d → uint256
addressToEmergencyUnlocked 0x23af3126 → bool
addressToWlMints 0xc7b89336 → uint256
balance 0xb69ef8a8 → uint256
balanceOf 0x70a08231 → uint256
getApproved 0x081812fc → address
isApprovedForAll 0xe985e9c5 → bool
isWhitelisted 0x5a23dd99 → bool
maxMintsPerTx 0xdc30158b → uint256
maxMintsPerWl 0x40f480e7 → uint256
maxTokens 0xe8315742 → uint256
mintPrice 0x6817c76c → uint256
name 0x06fdde03 → string
owner 0x8da5cb5b → address
ownerOf 0x6352211e → address
payableGovernanceAddresses 0xe47fa66e → address[]
payableGovernanceShares 0x8b2998f8 → uint256[]
publicMintStatus 0x26202370 → bool
supportsInterface 0x01ffc9a7 → bool
symbol 0x95d89b41 → string
tokenOfOwnerByIndex 0x2f745c59 → uint256
tokenURI 0xc87b56dd → string
totalSupply 0x18160ddd → uint256
viewWithdrawAmounts 0x524c7ff8 → uint256[]
walletOfOwner 0x438b6300 → uint256[]
whitelistMintStatus 0xcb9fe586 → bool
Write Contract 27 functions
These functions modify contract state and require a wallet transaction to execute.
approve 0x095ea7b3
address to_
uint256 tokenId_
emergencyWithdrawEther 0xdc92f8f0
No parameters
multiSafeTransferFrom 0x3a3473b6
address from_
address to_
uint256[] tokenIds_
bytes data_
multiTransferFrom 0xf487c602
address from_
address to_
uint256[] tokenIds_
ownerMint 0x484b973c
address to_
uint256 amount_
ownerMintToMany 0x9d2087ff
address[] tos_
uint256[] amounts_
publicMint 0x2db11544
uint256 amount_
renounceOwnership 0x715018a6
No parameters
reouncePayableGovernancePermissions 0xa91f8835
No parameters
resetPayableGovernanceShareholders 0x4959f0f5
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_
setBaseTokenURI 0x30176e13
string uri_
setBaseTokenURI_EXT 0x02ffaed1
string ext_
setMaxtokens 0x39e96c7b
uint256 maxTokens_
setMerkleRoot 0x7cb64759
bytes32 merkleRoot_
setMintPrice 0xf4a0a528
uint256 mintPrice_
setPayableGovernanceShareholders 0x6e9d287b
address[] addresses_
uint256[] shares_
setPublicMint 0xc1f730a4
bool bool_
uint256 time_
setWhitelistMint 0x19c3fa32
bool bool_
uint256 time_
setYieldToken 0x23ffce85
address address_
transferFrom 0x23b872dd
address from_
address to_
uint256 tokenId_
transferOwnership 0xf2fde38b
address newOwner_
unlockEmergencyFunctionsAsShareholder 0xd9d2b4cd
No parameters
whitelistMint 0x2904e6d9
bytes32[] proof_
uint256 amount_
withdrawEther 0x7362377b
No parameters
Recent Transactions
No transactions found for this address