Address Contract Partially Verified
Address
0x33a39af0F83E9D46a055e6eEbde3296D26d916F4
Balance
0 ETH
Nonce
1
Code Size
15680 bytes
Creator
0x9804D805...Ee11 at tx 0xcae0e586...61c09a
Indexed Transactions
0
Contract Bytecode
15680 bytes
0x6080604052600436106103e85760003560e01c80637c45f3df11610208578063c87b56dd11610118578063dc92f8f0116100ab578063f487c6021161007a578063f487c60214610ba3578063f4a0a52814610bc3578063f66ac73014610be3578063faf5fd4414610c03578063fc1b857114610c1957600080fd5b8063dc92f8f014610b11578063e47fa66e14610b26578063e985e9c514610b48578063f2fde38b14610b8357600080fd5b8063d311c80d116100e7578063d311c80d14610aba578063d5abeb0114610ad0578063d663595914610ae6578063d9d2b4cd14610afc57600080fd5b8063c87b56dd14610a5c578063cb9fe58614610a7c578063d04d3f8214610a91578063d2cab05614610aa757600080fd5b8063a0712d681161019b578063acdb4d9f1161016a578063acdb4d9f146109d3578063b4f9431e146109f3578063b69ef8a814610a09578063b88d4fde14610a1c578063c1f730a414610a3c57600080fd5b8063a0712d6814610975578063a22cb46514610988578063a26b1ab1146109a8578063a91f8835146109be57600080fd5b80638da5cb5b116101d75780638da5cb5b1461090a5780639514857d1461092a57806395d89b411461094a5780639970cc291461095f57600080fd5b80637c45f3df146108955780637cb64759146108b55780637ece7fa6146108d55780638b2998f8146108f557600080fd5b806342842e0e116103035780636817c76c1161029657806370a082311161026557806370a08231146107fe578063715018a61461082b57806371ba36121461084057806371cf94a6146108605780637362377b1461088057600080fd5b80636817c76c1461077b5780636e770abe146107915780636e9d287b146107be5780636f8b44b0146107de57600080fd5b80634ee09efb116102d25780634ee09efb146106fb578063524c7ff8146107105780635a23dd99146107255780636352211e1461074557600080fd5b806342842e0e14610679578063438b6300146106995780634959f0f5146106c65780634be66f3e146106db57600080fd5b8063185eb6ec1161037b57806323b872dd1161034a57806323b872dd14610604578063262023701461062457806330176e13146106395780633a3473b61461065957600080fd5b8063185eb6ec14610584578063213cc76c1461059a57806321d7b649146105ba57806323af3126146105d457600080fd5b8063095ea7b3116103b7578063095ea7b3146104f35780630e6aeab0146105135780630edc92e61461054e57806318160ddd1461056e57600080fd5b806301ffc9a71461042c57806302ffaed11461046157806306fdde0314610483578063081812fc146104a557600080fd5b3661042757604080513381523460208201527f88a5966d370b9919b20f3e2c13ff65706f196a4e32cc2c12bf57088f88525874910160405180910390a1005b600080fd5b34801561043857600080fd5b5061044c61044736600461376d565b610c2f565b60405190151581526020015b60405180910390f35b34801561046d57600080fd5b5061048161047c3660046137a7565b610c66565b005b34801561048f57600080fd5b50610498610ca5565b60405161045891906139f6565b3480156104b157600080fd5b506104db6104c0366004613754565b6007602052600090815260409020546001600160a01b031681565b6040516001600160a01b039091168152602001610458565b3480156104ff57600080fd5b5061048161050e3660046135b4565b610d33565b34801561051f57600080fd5b5061054061052e366004613351565b60126020526000908152604090205481565b604051908152602001610458565b34801561055a57600080fd5b50600b546104db906001600160a01b031681565b34801561057a57600080fd5b5061054060045481565b34801561059057600080fd5b5061054060105481565b3480156105a657600080fd5b506104816105b5366004613738565b610e57565b3480156105c657600080fd5b5060195461044c9060ff1681565b3480156105e057600080fd5b5061044c6105ef366004613351565b60186020526000908152604090205460ff1681565b34801561061057600080fd5b5061048161061f366004613490565b610e9c565b34801561063057600080fd5b5061044c610eb1565b34801561064557600080fd5b506104816106543660046137a7565b610ecd565b34801561066557600080fd5b50610481610674366004613408565b610f00565b34801561068557600080fd5b50610481610694366004613490565b610f4a565b3480156106a557600080fd5b506106b96106b4366004613351565b610f65565b60405161045891906139be565b3480156106d257600080fd5b5061048161109c565b3480156106e757600080fd5b506104816106f63660046135e0565b61113c565b34801561070757600080fd5b5061044c61121f565b34801561071c57600080fd5b506106b961123a565b34801561073157600080fd5b5061044c610740366004613530565b6114bc565b34801561075157600080fd5b506104db610760366004613754565b6005602052600090815260409020546001600160a01b031681565b34801561078757600080fd5b50610540601e5481565b34801561079d57600080fd5b506105406107ac366004613351565b60236020526000908152604090205481565b3480156107ca57600080fd5b506104816107d936600461369e565b6115e0565b3480156107ea57600080fd5b506104816107f9366004613754565b611806565b34801561080a57600080fd5b50610540610819366004613351565b60066020526000908152604090205481565b34801561083757600080fd5b50610481611835565b34801561084c57600080fd5b506021546104db906001600160a01b031681565b34801561086c57600080fd5b506020546104db906001600160a01b031681565b34801561088c57600080fd5b50610481611869565b3480156108a157600080fd5b506104816108b0366004613351565b611a0d565b3480156108c157600080fd5b506104816108d0366004613754565b611a63565b3480156108e157600080fd5b50600d546104db906001600160a01b031681565b34801561090157600080fd5b506106b9611a96565b34801561091657600080fd5b50600a546104db906001600160a01b031681565b34801561093657600080fd5b50610481610945366004613754565b611aee565b34801561095657600080fd5b50610498611bda565b34801561096b57600080fd5b5061054060225481565b610481610983366004613754565b611be7565b34801561099457600080fd5b506104816109a336600461357f565b611d3a565b3480156109b457600080fd5b50610540600f5481565b3480156109ca57600080fd5b50610481611d45565b3480156109df57600080fd5b50600e546104db906001600160a01b031681565b3480156109ff57600080fd5b5061054060115481565b348015610a1557600080fd5b5047610540565b348015610a2857600080fd5b50610481610a373660046134d1565b611d81565b348015610a4857600080fd5b50610481610a57366004613738565b611d9d565b348015610a6857600080fd5b50610498610a77366004613754565b611dde565b348015610a8857600080fd5b5061044c611e8c565b348015610a9d57600080fd5b50610540601f5481565b610481610ab53660046137ef565b611ea7565b348015610ac657600080fd5b50610540601c5481565b348015610adc57600080fd5b50610540601d5481565b348015610af257600080fd5b50610540601a5481565b348015610b0857600080fd5b5061048161210a565b348015610b1d57600080fd5b506104816121c9565b348015610b3257600080fd5b50610b3b6122b6565b6040516104589190613971565b348015610b5457600080fd5b5061044c610b6336600461336e565b600860209081526000928352604080842090915290825290205460ff1681565b348015610b8f57600080fd5b50610481610b9e366004613351565b612317565b348015610baf57600080fd5b50610481610bbe3660046133a7565b6123b0565b348015610bcf57600080fd5b50610481610bde366004613754565b6123f2565b348015610bef57600080fd5b50610481610bfe366004613738565b612421565b348015610c0f57600080fd5b5061054060145481565b348015610c2557600080fd5b50610540600c5481565b60006380ac58cd60e01b6001600160e01b031983161480610c605750635b5e139f60e01b6001600160e01b03198316145b92915050565b600a546001600160a01b03163314610c995760405162461bcd60e51b8152600401610c9090613a94565b60405180910390fd5b610ca281612462565b50565b60008054610cb290613c07565b80601f0160208091040260200160405190810160405280929190818152602001828054610cde90613c07565b8015610d2b5780601f10610d0057610100808354040283529160200191610d2b565b820191906000526020600020905b815481529060010190602001808311610d0e57829003601f168201915b505050505081565b6000818152600560205260409020546001600160a01b03908116908316811415610db35760405162461bcd60e51b815260206004820152602b60248201527f455243373231493a20617070726f766528292043616e6e6f7420617070726f7660448201526a6520796f757273656c662160a81b6064820152608401610c90565b336001600160a01b0382161480610ded57506001600160a01b038116600090815260086020908152604080832033845290915290205460ff165b610e485760405162461bcd60e51b815260206004820152602660248201527f455243373231493a2043616c6c6572206e6f74206f776e6572206f7220417070604482015265726f7665642160d01b6064820152608401610c90565b610e528383612475565b505050565b600a546001600160a01b03163314610e815760405162461bcd60e51b8152600401610c9090613a94565b6013805460ff191683151517905560148190555050565b5050565b610ea683836124fd565b610e528383836125c0565b60195460009060ff168015610ec8575042601a5411155b905090565b600a546001600160a01b03163314610ef75760405162461bcd60e51b8152600401610c9090613a94565b610ca28161263d565b60005b8251811015610f4357610f318585858481518110610f2357610f23613cb3565b602002602001015185611d81565b80610f3b81613c42565b915050610f03565b5050505050565b610e5283838360405180602001604052806000815250611d81565b6001600160a01b038116600090815260066020526040812054606091816001600160401b03811115610f9957610f99613cc9565b604051908082528060200260200182016040528015610fc2578160200160208202803683370190505b50600454909150600090815b81811015611091576000818152600560205260409020546001600160a01b031615801561101e575083611002600187613bad565b8151811061101257611012613cb3565b60200260200101516000145b15611031578161102d81613c42565b9250505b6000818152600560205260409020546001600160a01b038881169116141561107f578084848151811061106657611066613cb3565b60209081029190910101528261107b81613c42565b9350505b8061108981613c42565b915050610fce565b509195945050505050565b6015546001600160a01b031633146110c65760405162461bcd60e51b8152600401610c9090613a09565b601654156111065760168054806110df576110df613c9d565b600082815260209020810160001990810180546001600160a01b03191690550190556110c6565b6017541561113a57601780548061111f5761111f613c9d565b60019003818190600052602060002001600090559055611106565b565b600a546001600160a01b031633146111665760405162461bcd60e51b8152600401610c9090613a94565b80518251146111c55760405162461bcd60e51b815260206004820152602560248201527f6f776e65724d696e744d616e793a206172726179206c656e677468206d69736d604482015264617463682160d81b6064820152608401610c90565b60005b8251811015610e525761120d8382815181106111e6576111e6613cb3565b602002602001015183838151811061120057611200613cb3565b6020026020010151612650565b8061121781613c42565b9150506111c8565b60135460009060ff168015610ec85750426014541115905090565b600a546060906001600160a01b031633146112675760405162461bcd60e51b8152600401610c9090613a94565b60165415801590611279575060175415155b6112c55760405162461bcd60e51b815260206004820152601f60248201527f50617961626c6520676f7665726e616e6365206e6f74207365742079657421006044820152606401610c90565b601754601654146112e85760405162461bcd60e51b8152600401610c9090613a51565b6000805b601754811015611333576017818154811061130957611309613cb3565b90600052602060002001548261131f9190613b62565b91508061132b81613c42565b9150506112ec565b50806103e8146113555760405162461bcd60e51b8152600401610c9090613ac9565b6016544790600090611368906002613b62565b6001600160401b0381111561137f5761137f613cc9565b6040519080825280602002602001820160405280156113a8578160200160208202803683370190505b50905060005b60165481101561141d576103e8601782815481106113ce576113ce613cb3565b9060005260206000200154846113e49190613b8e565b6113ee9190613b7a565b82828151811061140057611400613cb3565b60209081029190910101528061141581613c42565b9150506113ae565b50601654815183918391811061143557611435613cb3565b60200260200101818152505060005b6016548110156114b45781818151811061146057611460613cb3565b602002602001015182601680549050600161147b9190613b62565b8151811061148b5761148b613cb3565b6020026020010181815161149f9190613b62565b905250806114ac81613c42565b915050611444565b509250505090565b6040516bffffffffffffffffffffffff19606084901b166020820152600090819060340160405160208183030381529060405280519060200120905060005b83518110156115d45783818151811061151657611516613cb3565b602002602001015182106115745783818151811061153657611536613cb3565b602002602001015182604051602001611559929190918252602082015260400190565b604051602081830303815290604052805190602001206115c0565b8184828151811061158757611587613cb3565b60200260200101516040516020016115a9929190918252602082015260400190565b604051602081830303815290604052805190602001205b9150806115cc81613c42565b9150506114fb565b50600954149392505050565b6015546001600160a01b0316331461160a5760405162461bcd60e51b8152600401610c9090613a09565b60165415801561161a5750601754155b61168c5760405162461bcd60e51b815260206004820152603a60248201527f50617961626c6520476f7665726e616e636520616c726561647920736574212060448201527f546f2073657420616761696e2c207265736574206669727374210000000000006064820152608401610c90565b80518251146116e95760405162461bcd60e51b815260206004820152602360248201527f4164647265737320616e6420536861726573206c656e677468206d69736d617460448201526263682160e81b6064820152608401610c90565b6000805b83518110156117b45782818151811061170857611708613cb3565b60200260200101518261171b9190613b62565b9150601684828151811061173157611731613cb3565b60209081029190910181015182546001810184556000938452919092200180546001600160a01b0319166001600160a01b03909216919091179055825160179084908390811061178357611783613cb3565b60209081029190910181015182546001810184556000938452919092200155806117ac81613c42565b9150506116ed565b50806103e814610e525760405162461bcd60e51b815260206004820152601960248201527f546f74616c20536861726573206973206e6f74203130303021000000000000006044820152606401610c90565b600a546001600160a01b031633146118305760405162461bcd60e51b8152600401610c9090613a94565b601d55565b600a546001600160a01b0316331461185f5760405162461bcd60e51b8152600401610c9090613a94565b61113a6000612723565b600a546001600160a01b031633146118935760405162461bcd60e51b8152600401610c9090613a94565b601654158015906118a5575060175415155b6118f15760405162461bcd60e51b815260206004820152601f60248201527f50617961626c6520676f7665726e616e6365206e6f74207365742079657421006044820152606401610c90565b601754601654146119145760405162461bcd60e51b8152600401610c9090613a51565b6000805b60175481101561195f576017818154811061193557611935613cb3565b90600052602060002001548261194b9190613b62565b91508061195781613c42565b915050611918565b50806103e8146119815760405162461bcd60e51b8152600401610c9090613ac9565b4760005b601654811015610e525760006103e8601783815481106119a7576119a7613cb3565b9060005260206000200154846119bd9190613b8e565b6119c79190613b7a565b90506119fa601683815481106119df576119df613cb3565b6000918252602090912001546001600160a01b031682612775565b5080611a0581613c42565b915050611985565b600a546001600160a01b03163314611a375760405162461bcd60e51b8152600401610c9090613a94565b602080546001600160a01b039092166001600160a01b0319928316811790915560218054909216179055565b600a546001600160a01b03163314611a8d5760405162461bcd60e51b8152600401610c9090613a94565b610ca281600955565b60606017805480602002602001604051908101604052809291908181526020018280548015611ae457602002820191906000526020600020905b815481526020019060010190808311611ad0575b5050505050905090565b60135460ff168015611b0257504260145411155b611b595760405162461bcd60e51b815260206004820152602260248201527f536174656c6c697465204d696e74206973206e6f7420656e61626c6564207965604482015261742160f01b6064820152608401610c90565b806011541015611bc75760405162461bcd60e51b815260206004820152603360248201527f4f766572206d6178696d756d206d696e747320706572206164647265737320666044820152726f7220536174656c6c697465204d696e74732160681b6064820152608401610c90565b611bd08161280a565b610ca23282612650565b60018054610cb290613c07565b333214611c2c5760405162461bcd60e51b81526020600482015260136024820152724e6f20536d61727420436f6e7472616374732160681b6044820152606401610c90565b60195460ff168015611c40575042601a5411155b611c8c5760405162461bcd60e51b815260206004820152601f60248201527f5075626c6963204d696e74206973206e6f7420656e61626c65642079657421006044820152606401610c90565b80601f541015611cde5760405162461bcd60e51b815260206004820152601760248201527f4d6178696d756d2035206d696e747320706572207478210000000000000000006044820152606401610c90565b80601e54611cec9190613b8e565b3414611d305760405162461bcd60e51b8152602060048201526013602482015272496e76616c69642076616c75652073656e742160681b6044820152606401610c90565b610ca23382612650565b610e983383836129da565b6015546001600160a01b03163314611d6f5760405162461bcd60e51b8152600401610c9090613a09565b601580546001600160a01b0319169055565b611d8b84846124fd565b611d9784848484612acf565b50505050565b600a546001600160a01b03163314611dc75760405162461bcd60e51b8152600401610c9090613a94565b6019805460ff1916831515179055601a8190555050565b6000818152600560205260409020546060906001600160a01b0316611e575760405162461bcd60e51b815260206004820152602960248201527f455243373231493a20746f6b656e555249282920546f6b656e20646f6573206e6044820152686f742065786973742160b81b6064820152608401610c90565b6002611e6283612c25565b6003604051602001611e7693929190613901565b6040516020818303038152906040529050919050565b601b5460009060ff168015610ec8575042601c541115905090565b333214611eec5760405162461bcd60e51b81526020600482015260136024820152724e6f20536d61727420436f6e7472616374732160681b6044820152606401610c90565b601b5460ff168015611f00575042601c5411155b611f575760405162461bcd60e51b815260206004820152602260248201527f57686974656c697374204d696e74206973206e6f7420656e61626c6564207965604482015261742160f01b6064820152608401610c90565b611f6133826114bc565b611fad5760405162461bcd60e51b815260206004820152601860248201527f596f7520617265206e6f742077686974656c69737465642100000000000000006044820152606401610c90565b81602254101561200d5760405162461bcd60e51b815260206004820152602560248201527f4d6178696d756d2033206d696e74732070657220747820666f722077686974656044820152646c6973742160d81b6064820152608401610c90565b33600090815260236020526040902054612028908390613b62565b60225410156120895760405162461bcd60e51b815260206004820152602760248201527f416d6f756e74206578636565647320617661696c61626c6520666f722077686960448201526674656c6973742160c81b6064820152608401610c90565b81601e546120979190613b8e565b34146120db5760405162461bcd60e51b8152602060048201526013602482015272496e76616c69642076616c75652073656e742160681b6044820152606401610c90565b33600090815260236020526040812080548492906120fa908490613b62565b90915550610e9890503383612650565b6000805b60165481101561215e576016818154811061212b5761212b613cb3565b6000918252602090912001546001600160a01b031633141561214c57600191505b8061215681613c42565b91505061210e565b50806121ac5760405162461bcd60e51b815260206004820152601a60248201527f596f7520617265206e6f742061207368617265686f6c646572210000000000006044820152606401610c90565b50336000908152601860205260409020805460ff19166001179055565b600a546001600160a01b031633146121f35760405162461bcd60e51b8152600401610c9090613a94565b60005b6016548110156122ab57601860006016838154811061221757612217613cb3565b60009182526020808320909101546001600160a01b0316835282019290925260400190205460ff166122995760405162461bcd60e51b815260206004820152602560248201527f456d657267656e63792046756e6374696f6e7320617265206e6f7420756e6c6f604482015264636b65642160d81b6064820152608401610c90565b806122a381613c42565b9150506121f6565b5061113a3347612775565b60606016805480602002602001604051908101604052809291908181526020018280548015611ae457602002820191906000526020600020905b81546001600160a01b031681526001909101906020018083116122f0575050505050905090565b600a546001600160a01b031633146123415760405162461bcd60e51b8152600401610c9090613a94565b6001600160a01b0381166123a75760405162461bcd60e51b815260206004820152602760248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f20616044820152666464726573732160c81b6064820152608401610c90565b610ca281612723565b60005b8151811015611d97576123e084848484815181106123d3576123d3613cb3565b6020026020010151610e9c565b806123ea81613c42565b9150506123b3565b600a546001600160a01b0316331461241c5760405162461bcd60e51b8152600401610c9090613a94565b601e55565b600a546001600160a01b0316331461244b5760405162461bcd60e51b8152600401610c9090613a94565b601b805460ff1916831515179055601c8190555050565b8051610e989060039060208401906131b3565b6000818152600760205260409020546001600160a01b03838116911614610e9857600081815260076020908152604080832080546001600160a01b0319166001600160a01b038781169182179092556005909352818420549151859492909116917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591a45050565b60215460405163632447c960e01b81526001600160a01b0384811660048301529091169063632447c990602401600060405180830381600087803b15801561254457600080fd5b505af1158015612558573d6000803e3d6000fd5b505060215460405163632447c960e01b81526001600160a01b038581166004830152909116925063632447c991506024015b600060405180830381600087803b1580156125a457600080fd5b505af11580156125b8573d6000803e3d6000fd5b505050505050565b6125ca3382612d2b565b6126325760405162461bcd60e51b815260206004820152603360248201527f455243373231493a207472616e7366657246726f6d2829205f6973417070726f6044820152727665644f724f776e6572203d2066616c73652160681b6064820152608401610c90565b610e52838383612e26565b8051610e989060029060208401906131b3565b8060045461265e9190613b62565b601d5410156126bb5760405162461bcd60e51b815260206004820152602360248201527f5f6d696e744d616e793a20616d6f756e742065786365656473206d6178537570604482015262706c7960e81b6064820152608401610c90565b60005b818110156126f0576126de8360045460016126d99190613b62565b612ff8565b806126e881613c42565b9150506126be565b5060215460405163632447c960e01b81526001600160a01b0384811660048301529091169063632447c99060240161258a565b600a80546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6000826001600160a01b03168260405160006040518083038185875af1925050503d80600081146127c2576040519150601f19603f3d011682016040523d82523d6000602084013e6127c7565b606091505b5050905080610e525760405162461bcd60e51b815260206004820152600f60248201526e151c985b9cd9995c8819985a5b1959608a1b6044820152606401610c90565b600b546001600160a01b031633146128815760405162461bcd60e51b815260206004820152603460248201527f5f736174656c6c6974654d696e743a206d73672e73656e646572206973206e6f6044820152737420536174656c6c6974652053746174696f6e2160601b6064820152608401610c90565b80600c5461288f9190613b62565b6010541015612908576040805162461bcd60e51b81526020600482015260248101919091527f5f736174656c6c6974654d696e743a20616d6f756e745f20726571756573746560448201527f64206f766572206d6178696d756d2061766169616c626c6520746f6b656e73216064820152608401610c90565b32600090815260126020526040902054612923908290613b62565b601154101561299a5760405162461bcd60e51b815260206004820152603b60248201527f5f736174656c6c6974654d696e743a20616d6f756e742065786365656473206d60448201527f696e747320617661696c61626c652070657220616464726573732100000000006064820152608401610c90565b32600090815260126020526040812080548392906129b9908490613b62565b9250508190555080600c60008282546129d29190613b62565b909155505050565b816001600160a01b0316836001600160a01b03161415612a625760405162461bcd60e51b815260206004820152603d60248201527f455243373231493a205f736574417070726f76616c466f72416c6c2829204f7760448201527f6e6572206d757374206e6f7420626520746865204f70657261746f72210000006064820152608401610c90565b6001600160a01b03838116600081815260086020908152604080832094871680845294825291829020805460ff191686151590811790915591519182527f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a3505050565b612ada848484610e9c565b6001600160a01b0383163b15611d97576000836001600160a01b031663150b7a0233878686604051602401612b129493929190613934565b6040516020818303038152906040529060e01b6020820180516001600160e01b038381831617835250505050604051612b4b91906138e5565b600060405180830381855afa9150503d8060008114612b86576040519150601f19603f3d011682016040523d82523d6000602084013e612b8b565b606091505b50915050600081806020019051810190612ba5919061378a565b9050630a85bd0160e11b6001600160e01b03198216146125b85760405162461bcd60e51b815260206004820152603560248201527f455243373231493a20736166655472616e7366657246726f6d282920746f5f206044820152746e6f742045524337323152656365697661626c652160581b6064820152608401610c90565b606081612c495750506040805180820190915260018152600360fc1b602082015290565b8160005b8115612c735780612c5d81613c42565b9150612c6c9050600a83613b7a565b9150612c4d565b6000816001600160401b03811115612c8d57612c8d613cc9565b6040519080825280601f01601f191660200182016040528015612cb7576020820181803683370190505b5090505b8415612d235781612ccb81613bf0565b9250612cda9050600a86613c5d565b612ce5906030613b62565b60f81b818381518110612cfa57612cfa613cb3565b60200101906001600160f81b031916908160001a905350612d1c600a86613b7a565b9450612cbb565b949350505050565b6000818152600560205260408120546001600160a01b0316612dac5760405162461bcd60e51b815260206004820152603460248201527f455243373231493a205f6973417070726f7665644f724f776e65722829204f776044820152736e6572206973205a65726f20416464726573732160601b6064820152608401610c90565b6000828152600560205260409020546001600160a01b03908116908416811480612def57506000838152600760205260409020546001600160a01b038581169116145b80612d2357506001600160a01b0380821660009081526008602090815260408083209388168352929052205460ff16949350505050565b6000818152600560205260409020546001600160a01b03848116911614612ea95760405162461bcd60e51b815260206004820152603160248201527f455243373231493a205f7472616e736665722829205472616e73666572204e6f60448201527074204f776e6572206f6620546f6b656e2160781b6064820152608401610c90565b6001600160a01b038216612f165760405162461bcd60e51b815260206004820152602e60248201527f455243373231493a205f7472616e736665722829205472616e7366657220746f60448201526d205a65726f20416464726573732160901b6064820152608401610c90565b6000818152600760205260409020546001600160a01b031615612f3e57612f3e600082612475565b600081815260056020908152604080832080546001600160a01b0319166001600160a01b03878116919091179091558616835260069091528120805491612f8483613bf0565b90915550506001600160a01b0382166000908152600660205260408120805491612fad83613c42565b919050555080826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b6001600160a01b03821661305c5760405162461bcd60e51b815260206004820152602560248201527f455243373231493a205f6d696e742829204d696e7420746f205a65726f204164604482015264647265737360d81b6064820152608401610c90565b6000818152600560205260409020546001600160a01b0316156130d85760405162461bcd60e51b815260206004820152602e60248201527f455243373231493a205f6d696e74282920546f6b656e20746f204d696e74204160448201526d6c7265616479204578697374732160901b6064820152608401610c90565b600081815260056020908152604080832080546001600160a01b0319166001600160a01b03871690811790915583526006909152812080549161311a83613c42565b90915550506004805490600061312f83613c42565b909155505060405181906001600160a01b038416906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a4816001600160a01b03167f0f6798a560793a54c3bcfe86a93cde1e73087d944c0ea20544137d4121396885826040516131a791815260200190565b60405180910390a25050565b8280546131bf90613c07565b90600052602060002090601f0160209004810192826131e15760008555613227565b82601f106131fa57805160ff1916838001178555613227565b82800160010185558215613227579182015b8281111561322757825182559160200191906001019061320c565b50613233929150613237565b5090565b5b808211156132335760008155600101613238565b60006001600160401b0383111561326557613265613cc9565b613278601f8401601f1916602001613b0f565b905082815283838301111561328c57600080fd5b828260208301376000602084830101529392505050565b600082601f8301126132b457600080fd5b813560206132c96132c483613b3f565b613b0f565b80838252828201915082860187848660051b89010111156132e957600080fd5b60005b85811015613308578135845292840192908401906001016132ec565b5090979650505050505050565b8035801515811461332557600080fd5b919050565b600082601f83011261333b57600080fd5b61334a8383356020850161324c565b9392505050565b60006020828403121561336357600080fd5b813561334a81613cdf565b6000806040838503121561338157600080fd5b823561338c81613cdf565b9150602083013561339c81613cdf565b809150509250929050565b6000806000606084860312156133bc57600080fd5b83356133c781613cdf565b925060208401356133d781613cdf565b915060408401356001600160401b038111156133f257600080fd5b6133fe868287016132a3565b9150509250925092565b6000806000806080858703121561341e57600080fd5b843561342981613cdf565b9350602085013561343981613cdf565b925060408501356001600160401b038082111561345557600080fd5b613461888389016132a3565b9350606087013591508082111561347757600080fd5b506134848782880161332a565b91505092959194509250565b6000806000606084860312156134a557600080fd5b83356134b081613cdf565b925060208401356134c081613cdf565b929592945050506040919091013590565b600080600080608085870312156134e757600080fd5b84356134f281613cdf565b9350602085013561350281613cdf565b92506040850135915060608501356001600160401b0381111561352457600080fd5b6134848782880161332a565b6000806040838503121561354357600080fd5b823561354e81613cdf565b915060208301356001600160401b0381111561356957600080fd5b613575858286016132a3565b9150509250929050565b6000806040838503121561359257600080fd5b823561359d81613cdf565b91506135ab60208401613315565b90509250929050565b600080604083850312156135c757600080fd5b82356135d281613cdf565b946020939093013593505050565b600080604083850312156135f357600080fd5b82356001600160401b038082111561360a57600080fd5b818501915085601f83011261361e57600080fd5b8135602061362e6132c483613b3f565b8083825282820191508286018a848660051b890101111561364e57600080fd5b600096505b8487101561367a57803561366681613cdf565b835260019690960195918301918301613653565b509650508601359250508082111561369157600080fd5b50613575858286016132a3565b600080604083850312156136b157600080fd5b82356001600160401b03808211156136c857600080fd5b818501915085601f8301126136dc57600080fd5b813560206136ec6132c483613b3f565b8083825282820191508286018a848660051b890101111561370c57600080fd5b600096505b8487101561367a57803561372481613cdf565b835260019690960195918301918301613711565b6000806040838503121561374b57600080fd5b6135d283613315565b60006020828403121561376657600080fd5b5035919050565b60006020828403121561377f57600080fd5b813561334a81613cf4565b60006020828403121561379c57600080fd5b815161334a81613cf4565b6000602082840312156137b957600080fd5b81356001600160401b038111156137cf57600080fd5b8201601f810184136137e057600080fd5b612d238482356020840161324c565b6000806040838503121561380257600080fd5b8235915060208301356001600160401b0381111561356957600080fd5b60008151808452613837816020860160208601613bc4565b601f01601f19169290920160200192915050565b8054600090600181811c908083168061386557607f831692505b602080841082141561388757634e487b7160e01b600052602260045260246000fd5b81801561389b57600181146138ac576138d9565b60ff198616895284890196506138d9565b60008881526020902060005b868110156138d15781548b8201529085019083016138b8565b505084890196505b50505050505092915050565b600082516138f7818460208701613bc4565b9190910192915050565b600061390d828661384b565b845161391d818360208901613bc4565b6139298183018661384b565b979650505050505050565b6001600160a01b03858116825284166020820152604081018390526080606082018190526000906139679083018461381f565b9695505050505050565b6020808252825182820181905260009190848201906040850190845b818110156139b25783516001600160a01b03168352928401929184019160010161398d565b50909695505050505050565b6020808252825182820181905260009190848201906040850190845b818110156139b2578351835292840192918401916001016139da565b60208152600061334a602083018461381f565b60208082526028908201527f50617961626c65476f7665726e616e63653a2043616c6c6572206973206e6f74604082015267205365747465722160c01b606082015260800190565b60208082526023908201527f50617961626c6520676f7665726e616e6365206c656e677468206d69736d617460408201526263682160e81b606082015260800190565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b60208082526026908201527f50617961626c6520476f7665726e616e636520536861726573206973206e6f7460408201526520313030302160d01b606082015260800190565b604051601f8201601f191681016001600160401b0381118282101715613b3757613b37613cc9565b604052919050565b60006001600160401b03821115613b5857613b58613cc9565b5060051b60200190565b60008219821115613b7557613b75613c71565b500190565b600082613b8957613b89613c87565b500490565b6000816000190483118215151615613ba857613ba8613c71565b500290565b600082821015613bbf57613bbf613c71565b500390565b60005b83811015613bdf578181015183820152602001613bc7565b83811115611d975750506000910152565b600081613bff57613bff613c71565b506000190190565b600181811c90821680613c1b57607f821691505b60208210811415613c3c57634e487b7160e01b600052602260045260246000fd5b50919050565b6000600019821415613c5657613c56613c71565b5060010190565b600082613c6c57613c6c613c87565b500690565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052601260045260246000fd5b634e487b7160e01b600052603160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052604160045260246000fd5b6001600160a01b0381168114610ca257600080fd5b6001600160e01b031981168114610ca257600080fdfea26469706673582212206a5bb9fef147dc8771206a93f3274395eb82e5aad2c06a5cd6d95f38a85ff76d64736f6c63430008070033
Verified Source Code Partial Match
Compiler: v0.8.7+commit.e28d00a7
EVM: london
Optimization: Yes (200 runs)
SpaceYetis.sol 500 lines
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;
/* ERC721I - ERC721I (ERC721 0xInuarashi Edition) - Gas Optimized
Contributors: 0xInuarashi (Message to Martians, Anonymice), 0xBasset (Ether Orcs) */
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
ownerOf[tokenId_] = to_;
balanceOf[to_]++;
totalSupply++;
// ERC721I Ends Here
emit Transfer(address(0x0), to_, tokenId_);
emit Mint(to_, tokenId_);
}
// 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;
}
}
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 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));
}
}
// Open0x Payable Governance Module by 0xInuarashi
// This abstract contract utilizes for loops in order to iterate things in order to be modular
// It is not the most gas-effective implementation.
// We sacrified gas-effectiveness for Modularity instead.
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);
}
}
abstract contract PublicMint {
// Public Minting
bool public _publicMint; uint256 public _publicMintTime;
function _setPublicMint(bool bool_, uint256 time_) internal {
_publicMint = bool_; _publicMintTime = time_; }
modifier publicMintEnabled {
require(_publicMint && _publicMintTime <= block.timestamp,
"Public Mint is not enabled yet!"); _; }
function publicMintStatus() external view returns (bool) {
return _publicMint && _publicMintTime <= block.timestamp; }
}
abstract contract WhitelistMint {
// Whitelist Minting
bool internal _whitelistMint; uint256 public _whitelistMintTime;
function _setWhitelistMint(bool bool_, uint256 time_) internal {
_whitelistMint = bool_; _whitelistMintTime = time_; }
modifier whitelistMintEnabled {
require(_whitelistMint && _whitelistMintTime <= block.timestamp,
"Whitelist Mint is not enabled yet!"); _; }
function whitelistMintStatus() external view returns (bool) {
return _whitelistMint && _whitelistMintTime <= block.timestamp; }
}
abstract contract SatelliteMint {
// Satellite Minting
bool internal _satelliteMintEnabled; uint256 public _satelliteMintTime;
function _setSatelliteMint(bool bool_, uint256 time_) internal {
_satelliteMintEnabled = bool_; _satelliteMintTime = time_; }
modifier satelliteMintEnabled {
require(_satelliteMintEnabled && _satelliteMintTime <= block.timestamp,
"Satellite Mint is not enabled yet!"); _; }
function satelliteMintStatus() external view returns (bool) {
return _satelliteMintEnabled && _satelliteMintTime <= block.timestamp; }
}
abstract contract SatelliteReceiver {
// DO NOT CHANGE THIS
address public satelliteStationAddress = 0x69F7f7053024cd5923A11718F3A28cC62F2AF3a7;
uint256 public SSTokensMinted = 0;
// YOU CAN CONFIGURE THIS YOURSELF
address public SSTokenReceiver = 0x05b19Db67f83850fd79FDd308eaEDAA8fd9d8381;
address public SSTokenAddress = 0x984b6968132DA160122ddfddcc4461C995741513;
uint256 public SSTokensPerMint = 20 ether;
uint256 public SSTokensAvailable = 25;
uint256 public SSMintsPerAddress = 1;
mapping(address => uint256) public SSAddressToMints;
function _satelliteMint(uint256 amount_) internal {
require(msg.sender == satelliteStationAddress, "_satelliteMint: msg.sender is not Satellite Station!");
require(SSTokensAvailable >= SSTokensMinted + amount_, "_satelliteMint: amount_ requested over maximum avaialble tokens!");
require(SSMintsPerAddress >= SSAddressToMints[tx.origin] + amount_, "_satelliteMint: amount exceeds mints available per address!");
SSAddressToMints[tx.origin] += amount_;
SSTokensMinted += amount_;
}
}
interface iPlasma {
function updateReward(address address_) external;
}
contract SpaceYetis is ERC721I, MerkleWhitelist, Security, Ownable, SatelliteReceiver, SatelliteMint, PayableGovernance, PublicMint, WhitelistMint {
constructor() ERC721I("Space Yetis", "YETI") {}
// General NFT Variables
uint256 public maxSupply = 3333;
uint256 public mintPrice = 0.08 ether;
uint256 public publicMaxMintsPerTx = 5;
// Token Yield Variables
address public plasmaAddress;
iPlasma public Plasma;
function setPlasma(address address_) external onlyOwner { plasmaAddress = address_; Plasma = iPlasma(address_); }
// Contract Administration
function setMerkleRoot(bytes32 merkleRoot_) external onlyOwner { _setMerkleRoot(merkleRoot_); }
function setMintPrice(uint256 mintPrice_) external onlyOwner { mintPrice = mintPrice_; }
function setMaxSupply(uint256 supply_) external onlyOwner { maxSupply = supply_; }
function setSatelliteMint(bool bool_, uint256 time_) external onlyOwner { _setSatelliteMint(bool_, time_); }
function setWhitelisMint(bool bool_, uint256 time_) external onlyOwner { _setWhitelistMint(bool_, time_); }
function setPublicMint(bool bool_, uint256 time_) external onlyOwner { _setPublicMint(bool_, time_); }
// Internal Functions
function _mintMany(address to_, uint256 amount_) internal {
require(maxSupply >= totalSupply + amount_, "_mintMany: amount exceeds maxSupply");
for (uint256 i = 0; i < amount_; i++) {
_mint(to_, (totalSupply + 1)); // iterate from 1
}
Plasma.updateReward(to_);
}
// Onwer Mint
function ownerMintMany(address[] memory tos_, uint256[] memory amounts_) external onlyOwner {
require(tos_.length == amounts_.length, "ownerMintMany: array length mismatch!");
for (uint256 i = 0; i < tos_.length; i++) {
_mintMany(tos_[i], amounts_[i]);
}
}
// Satellite Mint
function satelliteMint(uint256 amount_) external satelliteMintEnabled {
require(SSMintsPerAddress >= amount_, "Over maximum mints per address for Satellite Mints!");
_satelliteMint(amount_);
_mintMany(tx.origin, amount_);
}
// Whitelist Mint
uint256 public maxMintsPerWL = 3;
mapping(address => uint256) public addressToWLMinted;
function whitelistMint(uint256 amount_, bytes32[] memory proof_) external payable onlySender whitelistMintEnabled {
require(isWhitelisted(msg.sender, proof_), "You are not whitelisted!");
require(maxMintsPerWL >= amount_, "Maximum 3 mints per tx for whitelist!");
require(maxMintsPerWL >= addressToWLMinted[msg.sender] + amount_, "Amount exceeds available for whitelist!");
require(msg.value == mintPrice * amount_, "Invalid value sent!");
addressToWLMinted[msg.sender] += amount_;
_mintMany(msg.sender, amount_);
}
// Public Mint
function mint(uint256 amount_) external payable onlySender publicMintEnabled {
require(publicMaxMintsPerTx >= amount_, "Maximum 5 mints per tx!");
require(msg.value == mintPrice * amount_, "Invalid value sent!");
_mintMany(msg.sender, amount_);
}
// Token Overrides for Transfer-Hook token yield
function __yieldTransferHook(address from_, address to_) internal {
Plasma.updateReward(from_);
Plasma.updateReward(to_);
}
function transferFrom(address from_, address to_, uint256 tokenId_) public override {
__yieldTransferHook(from_, to_);
ERC721I.transferFrom(from_, to_, tokenId_);
}
function safeTransferFrom(address from_, address to_, uint256 tokenId_, bytes memory data_) public override {
__yieldTransferHook(from_, to_);
ERC721I.safeTransferFrom(from_, to_, tokenId_, data_);
}
// TokenURI Stuffs
function setBaseTokenURI(string memory uri_) external onlyOwner {
_setBaseTokenURI(uri_);
}
function setBaseTokenURI_EXT(string memory ext_) external onlyOwner {
_setBaseTokenURI_EXT(ext_);
}
}
Read Contract
Plasma 0x71ba3612 → address
SSAddressToMints 0x0e6aeab0 → uint256
SSMintsPerAddress 0xb4f9431e → uint256
SSTokenAddress 0xacdb4d9f → address
SSTokenReceiver 0x7ece7fa6 → address
SSTokensAvailable 0x185eb6ec → uint256
SSTokensMinted 0xfc1b8571 → uint256
SSTokensPerMint 0xa26b1ab1 → uint256
_publicMint 0x21d7b649 → bool
_publicMintTime 0xd6635959 → uint256
_satelliteMintTime 0xfaf5fd44 → uint256
_whitelistMintTime 0xd311c80d → uint256
addressToEmergencyUnlocked 0x23af3126 → bool
addressToWLMinted 0x6e770abe → uint256
balance 0xb69ef8a8 → uint256
balanceOf 0x70a08231 → uint256
getApproved 0x081812fc → address
isApprovedForAll 0xe985e9c5 → bool
isWhitelisted 0x5a23dd99 → bool
maxMintsPerWL 0x9970cc29 → uint256
maxSupply 0xd5abeb01 → uint256
mintPrice 0x6817c76c → uint256
name 0x06fdde03 → string
owner 0x8da5cb5b → address
ownerOf 0x6352211e → address
payableGovernanceAddresses 0xe47fa66e → address[]
payableGovernanceShares 0x8b2998f8 → uint256[]
plasmaAddress 0x71cf94a6 → address
publicMaxMintsPerTx 0xd04d3f82 → uint256
publicMintStatus 0x26202370 → bool
satelliteMintStatus 0x4ee09efb → bool
satelliteStationAddress 0x0edc92e6 → address
supportsInterface 0x01ffc9a7 → bool
symbol 0x95d89b41 → string
tokenURI 0xc87b56dd → string
totalSupply 0x18160ddd → uint256
viewWithdrawAmounts 0x524c7ff8 → uint256[]
walletOfOwner 0x438b6300 → uint256[]
whitelistMintStatus 0xcb9fe586 → bool
Write Contract 28 functions
These functions modify contract state and require a wallet transaction to execute.
approve 0x095ea7b3
address to_
uint256 tokenId_
emergencyWithdrawEther 0xdc92f8f0
No parameters
mint 0xa0712d68
uint256 amount_
multiSafeTransferFrom 0x3a3473b6
address from_
address to_
uint256[] tokenIds_
bytes data_
multiTransferFrom 0xf487c602
address from_
address to_
uint256[] tokenIds_
ownerMintMany 0x4be66f3e
address[] tos_
uint256[] amounts_
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_
satelliteMint 0x9514857d
uint256 amount_
setApprovalForAll 0xa22cb465
address operator_
bool approved_
setBaseTokenURI 0x30176e13
string uri_
setBaseTokenURI_EXT 0x02ffaed1
string ext_
setMaxSupply 0x6f8b44b0
uint256 supply_
setMerkleRoot 0x7cb64759
bytes32 merkleRoot_
setMintPrice 0xf4a0a528
uint256 mintPrice_
setPayableGovernanceShareholders 0x6e9d287b
address[] addresses_
uint256[] shares_
setPlasma 0x7c45f3df
address address_
setPublicMint 0xc1f730a4
bool bool_
uint256 time_
setSatelliteMint 0x213cc76c
bool bool_
uint256 time_
setWhitelisMint 0xf66ac730
bool bool_
uint256 time_
transferFrom 0x23b872dd
address from_
address to_
uint256 tokenId_
transferOwnership 0xf2fde38b
address newOwner_
unlockEmergencyFunctionsAsShareholder 0xd9d2b4cd
No parameters
whitelistMint 0xd2cab056
uint256 amount_
bytes32[] proof_
withdrawEther 0x7362377b
No parameters
Recent Transactions
No transactions found for this address