Address Contract Partially Verified
Address
0x1258D60B224c0C5cD888D37bbF31aa5FCFb7e870
Balance
0 ETH
Nonce
1
Code Size
14253 bytes
Creator
0x7b550566...B7C5 at tx 0x3d88c09c...29c335
Indexed Transactions
0
Contract Bytecode
14253 bytes
0x6080604052600436106102345760003560e01c80635eaa82471161012e578063a9059cbb116100ab578063dd62ed3e1161006f578063dd62ed3e14610830578063e6be4a721461086d578063ea2f0b3714610896578063f2fde38b146108bf578063fb235f34146108e85761023b565b8063a9059cbb14610771578063b29ad50a146107ae578063c49b9a80146107c5578063ce831ed5146107ee578063d2d7ad83146108055761023b565b806375f0a874116100f257806375f0a8741461068857806385141a77146106b35780638da5cb5b146106de57806395d89b4114610709578063a457c2d7146107345761023b565b80635eaa8247146105b35780636b67c4df146105de5780636ca60bc61461060957806370a0823114610634578063715018a6146106715761023b565b806339509351116101bc578063470624021161018057806347062402146104cc57806349bd5a5e146104f75780634a74bb02146105225780635342acb41461054d5780635d098b381461058a5761023b565b806339509351146103e75780634076350314610424578063437823ec1461044f5780634447842514610478578063461d9476146104a35761023b565b8063220f669611610203578063220f6696146102fe57806323b872dd146103295780632b14ca5614610366578063313ce5671461039157806336e4ec64146103bc5761023b565b806306fdde0314610240578063095ea7b31461026b5780631694505e146102a857806318160ddd146102d35761023b565b3661023b57005b600080fd5b34801561024c57600080fd5b50610255610911565b6040516102629190612337565b60405180910390f35b34801561027757600080fd5b50610292600480360381019061028d91906123f2565b61094a565b60405161029f919061244d565b60405180910390f35b3480156102b457600080fd5b506102bd610968565b6040516102ca91906124c7565b60405180910390f35b3480156102df57600080fd5b506102e861098c565b6040516102f591906124f1565b60405180910390f35b34801561030a57600080fd5b50610313610996565b604051610320919061244d565b60405180910390f35b34801561033557600080fd5b50610350600480360381019061034b919061250c565b6109a9565b60405161035d919061244d565b60405180910390f35b34801561037257600080fd5b5061037b610aa9565b60405161038891906124f1565b60405180910390f35b34801561039d57600080fd5b506103a6610aaf565b6040516103b3919061257b565b60405180910390f35b3480156103c857600080fd5b506103d1610ab4565b6040516103de91906124f1565b60405180910390f35b3480156103f357600080fd5b5061040e600480360381019061040991906123f2565b610aba565b60405161041b919061244d565b60405180910390f35b34801561043057600080fd5b50610439610b66565b60405161044691906124f1565b60405180910390f35b34801561045b57600080fd5b5061047660048036038101906104719190612596565b610b6c565b005b34801561048457600080fd5b5061048d610c06565b60405161049a91906125e4565b60405180910390f35b3480156104af57600080fd5b506104ca60048036038101906104c591906125ff565b610c2c565b005b3480156104d857600080fd5b506104e1610cc3565b6040516104ee91906124f1565b60405180910390f35b34801561050357600080fd5b5061050c610cc9565b604051610519919061263b565b60405180910390f35b34801561052e57600080fd5b50610537610ced565b604051610544919061244d565b60405180910390f35b34801561055957600080fd5b50610574600480360381019061056f9190612596565b610d00565b604051610581919061244d565b60405180910390f35b34801561059657600080fd5b506105b160048036038101906105ac9190612596565b610d56565b005b3480156105bf57600080fd5b506105c8610e6a565b6040516105d591906124f1565b60405180910390f35b3480156105ea57600080fd5b506105f3610e70565b60405161060091906124f1565b60405180910390f35b34801561061557600080fd5b5061061e610e76565b60405161062b91906124f1565b60405180910390f35b34801561064057600080fd5b5061065b60048036038101906106569190612596565b610e7c565b60405161066891906124f1565b60405180910390f35b34801561067d57600080fd5b50610686610ec5565b005b34801561069457600080fd5b5061069d610ed9565b6040516106aa91906125e4565b60405180910390f35b3480156106bf57600080fd5b506106c8610eff565b6040516106d5919061263b565b60405180910390f35b3480156106ea57600080fd5b506106f3610f05565b604051610700919061263b565b60405180910390f35b34801561071557600080fd5b5061071e610f2e565b60405161072b9190612337565b60405180910390f35b34801561074057600080fd5b5061075b600480360381019061075691906123f2565b610f67565b604051610768919061244d565b60405180910390f35b34801561077d57600080fd5b50610798600480360381019061079391906123f2565b611013565b6040516107a5919061244d565b60405180910390f35b3480156107ba57600080fd5b506107c3611031565b005b3480156107d157600080fd5b506107ec60048036038101906107e79190612682565b611134565b005b3480156107fa57600080fd5b506108036111e5565b005b34801561081157600080fd5b5061081a61131d565b60405161082791906124f1565b60405180910390f35b34801561083c57600080fd5b50610857600480360381019061085291906126af565b611323565b60405161086491906124f1565b60405180910390f35b34801561087957600080fd5b50610894600480360381019061088f91906123f2565b6113aa565b005b3480156108a257600080fd5b506108bd60048036038101906108b89190612596565b611540565b005b3480156108cb57600080fd5b506108e660048036038101906108e19190612596565b6115da565b005b3480156108f457600080fd5b5061090f600480360381019061090a9190612596565b61165d565b005b6040518060400160405280600681526020017f4e6f64654149000000000000000000000000000000000000000000000000000081525081565b600061095e610957611771565b8484611779565b6001905092915050565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d81565b6000600454905090565b601060009054906101000a900460ff1681565b600080600260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006109f5611771565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905082811015610a75576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a6c90612761565b60405180910390fd5b610a80858585611942565b610a9d85610a8c611771565b8584610a9891906127b0565b611779565b60019150509392505050565b60095481565b601281565b600a5481565b6000610b5c610ac7611771565b848460026000610ad5611771565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610b5791906127e4565b611779565b6001905092915050565b600d5481565b610b74611d8c565b6001600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055507f025dbd6ad989fe1a64db7dc049e29723ff9d35a97d84ae9aab96196f00ec1a0081604051610bfb919061288a565b60405180910390a150565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b610c34611d8c565b68056bc75e2d63100000811015610c80576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c779061292a565b60405180910390fd5b80600e819055507fdd970dd9b5bfe707922155b058a407655cb18288b807e2216442bca8ad83d6b5600e54604051610cb891906129bc565b60405180910390a150565b60085481565b7f000000000000000000000000769f539486b31ef310125c44d7f405c6d470cd1f81565b601060019054906101000a900460ff1681565b6000600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b610d5e611d8c565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603610dcd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dc490612a36565b60405180910390fd5b80600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507f025dbd6ad989fe1a64db7dc049e29723ff9d35a97d84ae9aab96196f00ec1a00600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16604051610e5f9190612ae9565b60405180910390a150565b600f5481565b600b5481565b600c5481565b6000600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b610ecd611d8c565b610ed76000611e0a565b565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b61dead81565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6040518060400160405280600381526020017f475055000000000000000000000000000000000000000000000000000000000081525081565b6000611009610f74611771565b848460026000610f82611771565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461100491906127b0565b611779565b6001905092915050565b6000611027611020611771565b8484611942565b6001905092915050565b6001601060006101000a81548160ff021916908315150217905550600061105730610e7c565b905061106281611ece565b60004790506000600b54600a5461107991906127e4565b90506000810361108857600190505b600081600a54846110999190612b17565b6110a39190612b88565b905080836110b191906127b0565b92506110df600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16826120d6565b61110b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16846120d6565b6000600c81905550505050506000601060006101000a81548160ff021916908315150217905550565b61113c611d8c565b801515601060019054906101000a900460ff16151503611191576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161118890612c05565b60405180910390fd5b80601060016101000a81548160ff0219169083151502179055507f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc159816040516111da919061244d565b60405180910390a150565b6111ed611d8c565b60004790506000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168260405161123a90612c56565b60006040518083038185875af1925050503d8060008114611277576040519150601f19603f3d011682016040523d82523d6000602084013e61127c565b606091505b50509050806112c0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112b790612cb7565b60405180910390fd5b7f025dbd6ad989fe1a64db7dc049e29723ff9d35a97d84ae9aab96196f00ec1a00600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166040516113119190612d49565b60405180910390a15050565b600e5481565b6000600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b6113b2611d8c565b3073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611420576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161141790612de9565b60405180910390fd5b60008273ffffffffffffffffffffffffffffffffffffffff1663a9059cbb600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16846040518363ffffffff1660e01b815260040161147f929190612e09565b6020604051808303816000875af115801561149e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114c29190612e47565b905080611504576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114fb90612cb7565b60405180910390fd5b7fdd970dd9b5bfe707922155b058a407655cb18288b807e2216442bca8ad83d6b5826040516115339190612ee6565b60405180910390a1505050565b611548611d8c565b6000600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055507f025dbd6ad989fe1a64db7dc049e29723ff9d35a97d84ae9aab96196f00ec1a00816040516115cf9190612f86565b60405180910390a150565b6115e2611d8c565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611651576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161164890613026565b60405180910390fd5b61165a81611e0a565b50565b611665611d8c565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036116d4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116cb90613092565b60405180910390fd5b80600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507f025dbd6ad989fe1a64db7dc049e29723ff9d35a97d84ae9aab96196f00ec1a00600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166040516117669190613124565b60405180910390a150565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036117e8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117df906131c4565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611857576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161184e90613256565b60405180910390fd5b80600260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258360405161193591906124f1565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036119b1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119a8906132e8565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611a20576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a179061337a565b60405180910390fd5b60008111611a63576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a5a9061340c565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541015611ae5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611adc9061349e565b60405180910390fd5b6000611af030610e7c565b90506000600e5482101590506000601060009054906101000a900460ff16158015611b6757507f000000000000000000000000769f539486b31ef310125c44d7f405c6d470cd1f73ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff1614155b8015611b705750815b8015611b885750601060019054906101000a900460ff165b15611b9657611b95611031565b5b7f000000000000000000000000769f539486b31ef310125c44d7f405c6d470cd1f73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff16148015611c3b5750600360008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15611c5d57606484600954611c509190612b17565b611c5a9190612b88565b90505b7f000000000000000000000000769f539486b31ef310125c44d7f405c6d470cd1f73ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff16148015611d025750600360008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15611d2457606484600854611d179190612b17565b611d219190612b88565b90505b8084611d3091906127b0565b93506000811115611d7957611d46863083612191565b80600c6000828254611d5891906127e4565b9250508190555080600d6000828254611d7191906127e4565b925050819055505b611d84868686612191565b505050505050565b611d94611771565b73ffffffffffffffffffffffffffffffffffffffff16611db2610f05565b73ffffffffffffffffffffffffffffffffffffffff1614611e08576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611dff9061350a565b60405180910390fd5b565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6000600267ffffffffffffffff811115611eeb57611eea61352a565b5b604051908082528060200260200182016040528015611f195781602001602082028036833780820191505090505b5090503081600081518110611f3157611f30613559565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc281600181518110611fa057611f9f613559565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050612005307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d84611779565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b8152600401612067959493929190613681565b600060405180830381600087803b15801561208157600080fd5b505af1158015612095573d6000803e3d6000fd5b505050507f32cde87eb454f3a0b875ab23547023107cfad454363ec88ba5695e2c24aa52a782826040516120ca9291906136db565b60405180910390a15050565b600081031561218d5760008273ffffffffffffffffffffffffffffffffffffffff168260405161210590612c56565b60006040518083038185875af1925050503d8060008114612142576040519150601f19603f3d011682016040523d82523d6000602084013e612147565b606091505b505090508061218b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161218290613757565b60405180910390fd5b505b5050565b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546121e091906127b0565b9250508190555080600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461223691906127e4565b925050819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405161229a91906124f1565b60405180910390a3505050565b600081519050919050565b600082825260208201905092915050565b60005b838110156122e15780820151818401526020810190506122c6565b60008484015250505050565b6000601f19601f8301169050919050565b6000612309826122a7565b61231381856122b2565b93506123238185602086016122c3565b61232c816122ed565b840191505092915050565b6000602082019050818103600083015261235181846122fe565b905092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006123898261235e565b9050919050565b6123998161237e565b81146123a457600080fd5b50565b6000813590506123b681612390565b92915050565b6000819050919050565b6123cf816123bc565b81146123da57600080fd5b50565b6000813590506123ec816123c6565b92915050565b6000806040838503121561240957612408612359565b5b6000612417858286016123a7565b9250506020612428858286016123dd565b9150509250929050565b60008115159050919050565b61244781612432565b82525050565b6000602082019050612462600083018461243e565b92915050565b6000819050919050565b600061248d6124886124838461235e565b612468565b61235e565b9050919050565b600061249f82612472565b9050919050565b60006124b182612494565b9050919050565b6124c1816124a6565b82525050565b60006020820190506124dc60008301846124b8565b92915050565b6124eb816123bc565b82525050565b600060208201905061250660008301846124e2565b92915050565b60008060006060848603121561252557612524612359565b5b6000612533868287016123a7565b9350506020612544868287016123a7565b9250506040612555868287016123dd565b9150509250925092565b600060ff82169050919050565b6125758161255f565b82525050565b6000602082019050612590600083018461256c565b92915050565b6000602082840312156125ac576125ab612359565b5b60006125ba848285016123a7565b91505092915050565b60006125ce8261235e565b9050919050565b6125de816125c3565b82525050565b60006020820190506125f960008301846125d5565b92915050565b60006020828403121561261557612614612359565b5b6000612623848285016123dd565b91505092915050565b6126358161237e565b82525050565b6000602082019050612650600083018461262c565b92915050565b61265f81612432565b811461266a57600080fd5b50565b60008135905061267c81612656565b92915050565b60006020828403121561269857612697612359565b5b60006126a68482850161266d565b91505092915050565b600080604083850312156126c6576126c5612359565b5b60006126d4858286016123a7565b92505060206126e5858286016123a7565b9150509250929050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206160008201527f6c6c6f77616e6365000000000000000000000000000000000000000000000000602082015250565b600061274b6028836122b2565b9150612756826126ef565b604082019050919050565b6000602082019050818103600083015261277a8161273e565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006127bb826123bc565b91506127c6836123bc565b92508282039050818111156127de576127dd612781565b5b92915050565b60006127ef826123bc565b91506127fa836123bc565b925082820190508082111561281257612811612781565b5b92915050565b7f57652068617665206578636c756465642074686520666f6c6c6f77696e67207760008201527f616c6c656420696e20666565733a000000000000000000000000000000000000602082015250565b6000612874602e836122b2565b915061287f82612818565b604082019050919050565b600060408201905081810360008301526128a381612867565b90506128b2602083018461262c565b92915050565b7f596f75206e65656420746f20656e746572206d6f7265207468616e203130302060008201527f746f6b656e732e00000000000000000000000000000000000000000000000000602082015250565b60006129146027836122b2565b915061291f826128b8565b604082019050919050565b6000602082019050818103600083015261294381612907565b9050919050565b7f576520686176652075706461746564206d696e696d756e546f6b656e7342656660008201527f6f72655377617020746f3a000000000000000000000000000000000000000000602082015250565b60006129a6602b836122b2565b91506129b18261294a565b604082019050919050565b600060408201905081810360008301526129d581612999565b90506129e460208301846124e2565b92915050565b7f7365744d61726b6574696e6757616c6c65743a205a45524f0000000000000000600082015250565b6000612a206018836122b2565b9150612a2b826129ea565b602082019050919050565b60006020820190508181036000830152612a4f81612a13565b9050919050565b7f57652068617665205570646174656420746865204d61726b6574696e6757616c60008201527f6c65743a00000000000000000000000000000000000000000000000000000000602082015250565b6000612ab26024836122b2565b9150612abd82612a56565b604082019050919050565b6000612ad382612494565b9050919050565b612ae381612ac8565b82525050565b60006040820190508181036000830152612b0281612aa5565b9050612b116020830184612ada565b92915050565b6000612b22826123bc565b9150612b2d836123bc565b9250828202612b3b816123bc565b91508282048414831517612b5257612b51612781565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000612b93826123bc565b9150612b9e836123bc565b925082612bae57612bad612b59565b5b828204905092915050565b7f56616c756520616c726561647920736574000000000000000000000000000000600082015250565b6000612bef6011836122b2565b9150612bfa82612bb9565b602082019050919050565b60006020820190508181036000830152612c1e81612be2565b9050919050565b600081905092915050565b50565b6000612c40600083612c25565b9150612c4b82612c30565b600082019050919050565b6000612c6182612c33565b9150819050919050565b7f5472616e73666572206661696c65640000000000000000000000000000000000600082015250565b6000612ca1600f836122b2565b9150612cac82612c6b565b602082019050919050565b60006020820190508181036000830152612cd081612c94565b9050919050565b7f57652068617665207265636f766572207468652073746f636b2065746820667260008201527f6f6d20636f6e74726163742e0000000000000000000000000000000000000000602082015250565b6000612d33602c836122b2565b9150612d3e82612cd7565b604082019050919050565b60006040820190508181036000830152612d6281612d26565b9050612d716020830184612ada565b92915050565b7f4f776e65722063616e277420636c61696d20636f6e747261637427732062616c60008201527f616e6365206f6620697473206f776e20746f6b656e7300000000000000000000602082015250565b6000612dd36036836122b2565b9150612dde82612d77565b604082019050919050565b60006020820190508181036000830152612e0281612dc6565b9050919050565b6000604082019050612e1e6000830185612ada565b612e2b60208301846124e2565b9392505050565b600081519050612e4181612656565b92915050565b600060208284031215612e5d57612e5c612359565b5b6000612e6b84828501612e32565b91505092915050565b7f57652068617665207265636f766572656420746f6b656e732066726f6d20636f60008201527f6e74726163743a00000000000000000000000000000000000000000000000000602082015250565b6000612ed06027836122b2565b9150612edb82612e74565b604082019050919050565b60006040820190508181036000830152612eff81612ec3565b9050612f0e60208301846124e2565b92915050565b7f5765206861766520696e636c7564696e672074686520666f6c6c6f77696e672060008201527f77616c6c656420696e20666565733a0000000000000000000000000000000000602082015250565b6000612f70602f836122b2565b9150612f7b82612f14565b604082019050919050565b60006040820190508181036000830152612f9f81612f63565b9050612fae602083018461262c565b92915050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b60006130106026836122b2565b915061301b82612fb4565b604082019050919050565b6000602082019050818103600083015261303f81613003565b9050919050565b7f736574526576656e756557616c6c65743a205a45524f00000000000000000000600082015250565b600061307c6016836122b2565b915061308782613046565b602082019050919050565b600060208201905081810360008301526130ab8161306f565b9050919050565b7f57652068617665205570646174656420746865205261726b6574696e6757616c60008201527f6c65743a00000000000000000000000000000000000000000000000000000000602082015250565b600061310e6024836122b2565b9150613119826130b2565b604082019050919050565b6000604082019050818103600083015261313d81613101565b905061314c6020830184612ada565b92915050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b60006131ae6024836122b2565b91506131b982613152565b604082019050919050565b600060208201905081810360008301526131dd816131a1565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b60006132406022836122b2565b915061324b826131e4565b604082019050919050565b6000602082019050818103600083015261326f81613233565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b60006132d26025836122b2565b91506132dd82613276565b604082019050919050565b60006020820190508181036000830152613301816132c5565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b60006133646023836122b2565b915061336f82613308565b604082019050919050565b6000602082019050818103600083015261339381613357565b9050919050565b7f5472616e7366657220616d6f756e74206d75737420626520677265617465722060008201527f7468616e207a65726f0000000000000000000000000000000000000000000000602082015250565b60006133f66029836122b2565b91506134018261339a565b604082019050919050565b60006020820190508181036000830152613425816133e9565b9050919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b60006134886026836122b2565b91506134938261342c565b604082019050919050565b600060208201905081810360008301526134b78161347b565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b60006134f46020836122b2565b91506134ff826134be565b602082019050919050565b60006020820190508181036000830152613523816134e7565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6000819050919050565b60006135ad6135a86135a384613588565b612468565b6123bc565b9050919050565b6135bd81613592565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b6135f88161237e565b82525050565b600061360a83836135ef565b60208301905092915050565b6000602082019050919050565b600061362e826135c3565b61363881856135ce565b9350613643836135df565b8060005b8381101561367457815161365b88826135fe565b975061366683613616565b925050600181019050613647565b5085935050505092915050565b600060a08201905061369660008301886124e2565b6136a360208301876135b4565b81810360408301526136b58186613623565b90506136c4606083018561262c565b6136d160808301846124e2565b9695505050505050565b60006040820190506136f060008301856124e2565b81810360208301526137028184613623565b90509392505050565b7f5472616e73666572206661696c65642e00000000000000000000000000000000600082015250565b60006137416010836122b2565b915061374c8261370b565b602082019050919050565b6000602082019050818103600083015261377081613734565b905091905056fea2646970667358221220d27eecf47fd26e1a172780e5093d395abe48026a3c958d00d71fe3f1ec7d277b64736f6c63430008130033
Verified Source Code Partial Match
Compiler: v0.8.19+commit.7dd6d404
EVM: paris
Optimization: No
NODEAI.sol 1174 lines
// SPDX-License-Identifier: UNLICENSED
pragma solidity 0.8.19;
/*
/$$$$$$ /$$$$$$$ /$$ /$$
/$$__ $$| $$__ $$| $$ | $$
| $$ \__/| $$ \ $$| $$ | $$
| $$ /$$$$| $$$$$$$/| $$ | $$
| $$|_ $$| $$____/ | $$ | $$
| $$ \ $$| $$ | $$ | $$
| $$$$$$/| $$ | $$$$$$/
\______/ |__/ \______/
Website: https://nodeai.app
Twitter: https://twitter.com/NodeAIETH
Telegram: https://t.me/nodeaieth
Rent or lend GPU power, and earn rewards with $GPU.
We generate revenue by powering AI with GPUs.
*/
abstract contract Context {
function _msgSender() internal view virtual returns (address) {
return msg.sender;
}
function _msgData() internal view virtual returns (bytes calldata) {
return msg.data;
}
}
interface IERC20 {
function totalSupply() external view returns (uint256);
function balanceOf(address account) external view returns (uint256);
function transfer(
address recipient,
uint256 amount
) external returns (bool);
function allowance(
address owner,
address spender
) external view returns (uint256);
function approve(address spender, uint256 amount) external returns (bool);
function transferFrom(
address sender,
address recipient,
uint256 amount
) external returns (bool);
event Transfer(address indexed from, address indexed to, uint256 value);
event Approval(
address indexed owner,
address indexed spender,
uint256 value
);
}
/**
* @dev Collection of functions related to the address type
*/
library Address {
/**
* @dev Returns true if `account` is a contract.
*
* [IMPORTANT]
* ====
* It is unsafe to assume that an address for which this function returns
* false is an externally-owned account (EOA) and not a contract.
*
* Among others, `isContract` will return false for the following
* types of addresses:
*
* - an externally-owned account
* - a contract in construction
* - an address where a contract will be created
* - an address where a contract lived, but was destroyed
* ====
*
* [IMPORTANT]
* ====
* You shouldn't rely on `isContract` to protect against flash loan attacks!
*
* Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets
* like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract
* constructor.
* ====
*/
function isContract(address account) internal view returns (bool) {
// This method relies on extcodesize/address.code.length, which returns 0
// for contracts in construction, since the code is only stored at the end
// of the constructor execution.
return account.code.length > 0;
}
/**
* @dev Replacement for Solidity's `transfer`: sends `amount` wei to
* `recipient`, forwarding all available gas and reverting on errors.
*
* https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost
* of certain opcodes, possibly making contracts go over the 2300 gas limit
* imposed by `transfer`, making them unable to receive funds via
* `transfer`. {sendValue} removes this limitation.
*
* https://consensys.net/diligence/blog/2019/09/stop-using-soliditys-transfer-now/[Learn more].
*
* IMPORTANT: because control is transferred to `recipient`, care must be
* taken to not create reentrancy vulnerabilities. Consider using
* {ReentrancyGuard} or the
* https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].
*/
function sendValue(address payable recipient, uint256 amount) internal {
require(
address(this).balance >= amount,
"Address: insufficient balance"
);
(bool success, ) = recipient.call{value: amount}("");
require(
success,
"Address: unable to send value, recipient may have reverted"
);
}
/**
* @dev Performs a Solidity function call using a low level `call`. A
* plain `call` is an unsafe replacement for a function call: use this
* function instead.
*
* If `target` reverts with a revert reason, it is bubbled up by this
* function (like regular Solidity function calls).
*
* Returns the raw returned data. To convert to the expected return value,
* use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].
*
* Requirements:
*
* - `target` must be a contract.
* - calling `target` with `data` must not revert.
*
* _Available since v3.1._
*/
function functionCall(
address target,
bytes memory data
) internal returns (bytes memory) {
return
functionCallWithValue(
target,
data,
0,
"Address: low-level call failed"
);
}
/**
* @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with
* `errorMessage` as a fallback revert reason when `target` reverts.
*
* _Available since v3.1._
*/
function functionCall(
address target,
bytes memory data,
string memory errorMessage
) internal returns (bytes memory) {
return functionCallWithValue(target, data, 0, errorMessage);
}
/**
* @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
* but also transferring `value` wei to `target`.
*
* Requirements:
*
* - the calling contract must have an ETH balance of at least `value`.
* - the called Solidity function must be `payable`.
*
* _Available since v3.1._
*/
function functionCallWithValue(
address target,
bytes memory data,
uint256 value
) internal returns (bytes memory) {
return
functionCallWithValue(
target,
data,
value,
"Address: low-level call with value failed"
);
}
/**
* @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but
* with `errorMessage` as a fallback revert reason when `target` reverts.
*
* _Available since v3.1._
*/
function functionCallWithValue(
address target,
bytes memory data,
uint256 value,
string memory errorMessage
) internal returns (bytes memory) {
require(
address(this).balance >= value,
"Address: insufficient balance for call"
);
(bool success, bytes memory returndata) = target.call{value: value}(
data
);
return
verifyCallResultFromTarget(
target,
success,
returndata,
errorMessage
);
}
/**
* @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
* but performing a static call.
*
* _Available since v3.3._
*/
function functionStaticCall(
address target,
bytes memory data
) internal view returns (bytes memory) {
return
functionStaticCall(
target,
data,
"Address: low-level static call failed"
);
}
/**
* @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],
* but performing a static call.
*
* _Available since v3.3._
*/
function functionStaticCall(
address target,
bytes memory data,
string memory errorMessage
) internal view returns (bytes memory) {
(bool success, bytes memory returndata) = target.staticcall(data);
return
verifyCallResultFromTarget(
target,
success,
returndata,
errorMessage
);
}
/**
* @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
* but performing a delegate call.
*
* _Available since v3.4._
*/
function functionDelegateCall(
address target,
bytes memory data
) internal returns (bytes memory) {
return
functionDelegateCall(
target,
data,
"Address: low-level delegate call failed"
);
}
/**
* @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],
* but performing a delegate call.
*
* _Available since v3.4._
*/
function functionDelegateCall(
address target,
bytes memory data,
string memory errorMessage
) internal returns (bytes memory) {
(bool success, bytes memory returndata) = target.delegatecall(data);
return
verifyCallResultFromTarget(
target,
success,
returndata,
errorMessage
);
}
/**
* @dev Tool to verify that a low level call to smart-contract was successful, and revert (either by bubbling
* the revert reason or using the provided one) in case of unsuccessful call or if target was not a contract.
*
* _Available since v4.8._
*/
function verifyCallResultFromTarget(
address target,
bool success,
bytes memory returndata,
string memory errorMessage
) internal view returns (bytes memory) {
if (success) {
if (returndata.length == 0) {
// only check isContract if the call was successful and the return data is empty
// otherwise we already know that it was a contract
require(isContract(target), "Address: call to non-contract");
}
return returndata;
} else {
_revert(returndata, errorMessage);
}
}
/**
* @dev Tool to verify that a low level call was successful, and revert if it wasn't, either by bubbling the
* revert reason or using the provided one.
*
* _Available since v4.3._
*/
function verifyCallResult(
bool success,
bytes memory returndata,
string memory errorMessage
) internal pure returns (bytes memory) {
if (success) {
return returndata;
} else {
_revert(returndata, errorMessage);
}
}
function _revert(
bytes memory returndata,
string memory errorMessage
) private pure {
// Look for revert reason and bubble it up if present
if (returndata.length > 0) {
// The easiest way to bubble the revert reason is using memory via assembly
/// @solidity memory-safe-assembly
assembly {
let returndata_size := mload(returndata)
revert(add(32, returndata), returndata_size)
}
} else {
revert(errorMessage);
}
}
}
/**
* @dev Contract module which provides a basic access control mechanism, where
* there is an account (an owner) that can be granted exclusive access to
* specific functions.
*
* By default, the owner account will be the one that deploys the contract. This
* can later be changed with {transferOwnership}.
*
* This module is used through inheritance. It will make available the modifier
* `onlyOwner`, which can be applied to your functions to restrict their use to
* the owner.
*/
abstract contract Ownable is Context {
address private _owner;
event OwnershipTransferred(
address indexed previousOwner,
address indexed newOwner
);
/**
* @dev Initializes the contract setting the deployer as the initial owner.
*/
constructor() {
_transferOwnership(_msgSender());
}
/**
* @dev Throws if called by any account other than the owner.
*/
modifier onlyOwner() {
_checkOwner();
_;
}
/**
* @dev Returns the address of the current owner.
*/
function owner() public view virtual returns (address) {
return _owner;
}
/**
* @dev Throws if the sender is not the owner.
*/
function _checkOwner() internal view virtual {
require(owner() == _msgSender(), "Ownable: caller is not the owner");
}
/**
* @dev Leaves the contract without owner. It will not be possible to call
* `onlyOwner` functions anymore. Can only be called by the current owner.
*
* NOTE: Renouncing ownership will leave the contract without an owner,
* thereby removing any functionality that is only available to the owner.
*/
function renounceOwnership() public virtual onlyOwner {
_transferOwnership(address(0));
}
/**
* @dev Transfers ownership of the contract to a new account (`newOwner`).
* Can only be called by the current owner.
*/
function transferOwnership(address newOwner) public virtual onlyOwner {
require(
newOwner != address(0),
"Ownable: new owner is the zero address"
);
_transferOwnership(newOwner);
}
/**
* @dev Transfers ownership of the contract to a new account (`newOwner`).
* Internal function without access restriction.
*/
function _transferOwnership(address newOwner) internal virtual {
address oldOwner = _owner;
_owner = newOwner;
emit OwnershipTransferred(oldOwner, newOwner);
}
}
interface IUniswapV2Factory {
event PairCreated(
address indexed token0,
address indexed token1,
address pair,
uint256
);
function feeTo() external view returns (address);
function feeToSetter() external view returns (address);
function getPair(
address tokenA,
address tokenB
) external view returns (address pair);
function allPairs(uint256) external view returns (address pair);
function allPairsLength() external view returns (uint256);
function createPair(
address tokenA,
address tokenB
) external returns (address pair);
function setFeeTo(address) external;
function setFeeToSetter(address) external;
}
interface IUniswapV2Pair {
event Approval(
address indexed owner,
address indexed spender,
uint256 value
);
event Transfer(address indexed from, address indexed to, uint256 value);
function name() external pure returns (string memory);
function symbol() external pure returns (string memory);
function decimals() external pure returns (uint8);
function totalSupply() external view returns (uint256);
function balanceOf(address owner) external view returns (uint256);
function allowance(
address owner,
address spender
) external view returns (uint256);
function approve(address spender, uint256 value) external returns (bool);
function transfer(address to, uint256 value) external returns (bool);
function transferFrom(
address from,
address to,
uint256 value
) external returns (bool);
function DOMAIN_SEPARATOR() external view returns (bytes32);
function PERMIT_TYPEHASH() external pure returns (bytes32);
function nonces(address owner) external view returns (uint256);
function permit(
address owner,
address spender,
uint256 value,
uint256 deadline,
uint8 v,
bytes32 r,
bytes32 s
) external;
event Burn(
address indexed sender,
uint256 amount0,
uint256 amount1,
address indexed to
);
event Swap(
address indexed sender,
uint256 amount0In,
uint256 amount1In,
uint256 amount0Out,
uint256 amount1Out,
address indexed to
);
event Sync(uint112 reserve0, uint112 reserve1);
function MINIMUM_LIQUIDITY() external pure returns (uint256);
function factory() external view returns (address);
function token0() external view returns (address);
function token1() external view returns (address);
function getReserves()
external
view
returns (uint112 reserve0, uint112 reserve1, uint32 blockTimestampLast);
function price0CumulativeLast() external view returns (uint256);
function price1CumulativeLast() external view returns (uint256);
function kLast() external view returns (uint256);
function burn(
address to
) external returns (uint256 amount0, uint256 amount1);
function swap(
uint256 amount0Out,
uint256 amount1Out,
address to,
bytes calldata data
) external;
function skim(address to) external;
function sync() external;
function initialize(address, address) external;
}
interface IUniswapV2Router01 {
function factory() external pure returns (address);
function WETH() external pure returns (address);
function addLiquidity(
address tokenA,
address tokenB,
uint256 amountADesired,
uint256 amountBDesired,
uint256 amountAMin,
uint256 amountBMin,
address to,
uint256 deadline
) external returns (uint256 amountA, uint256 amountB, uint256 liquidity);
function addLiquidityETH(
address token,
uint256 amountTokenDesired,
uint256 amountTokenMin,
uint256 amountETHMin,
address to,
uint256 deadline
)
external
payable
returns (uint256 amountToken, uint256 amountETH, uint256 liquidity);
function removeLiquidity(
address tokenA,
address tokenB,
uint256 liquidity,
uint256 amountAMin,
uint256 amountBMin,
address to,
uint256 deadline
) external returns (uint256 amountA, uint256 amountB);
function removeLiquidityETH(
address token,
uint256 liquidity,
uint256 amountTokenMin,
uint256 amountETHMin,
address to,
uint256 deadline
) external returns (uint256 amountToken, uint256 amountETH);
function removeLiquidityWithPermit(
address tokenA,
address tokenB,
uint256 liquidity,
uint256 amountAMin,
uint256 amountBMin,
address to,
uint256 deadline,
bool approveMax,
uint8 v,
bytes32 r,
bytes32 s
) external returns (uint256 amountA, uint256 amountB);
function removeLiquidityETHWithPermit(
address token,
uint256 liquidity,
uint256 amountTokenMin,
uint256 amountETHMin,
address to,
uint256 deadline,
bool approveMax,
uint8 v,
bytes32 r,
bytes32 s
) external returns (uint256 amountToken, uint256 amountETH);
function swapExactTokensForTokens(
uint256 amountIn,
uint256 amountOutMin,
address[] calldata path,
address to,
uint256 deadline
) external returns (uint256[] memory amounts);
function swapTokensForExactTokens(
uint256 amountOut,
uint256 amountInMax,
address[] calldata path,
address to,
uint256 deadline
) external returns (uint256[] memory amounts);
function swapExactETHForTokens(
uint256 amountOutMin,
address[] calldata path,
address to,
uint256 deadline
) external payable returns (uint256[] memory amounts);
function swapTokensForExactETH(
uint256 amountOut,
uint256 amountInMax,
address[] calldata path,
address to,
uint256 deadline
) external returns (uint256[] memory amounts);
function swapExactTokensForETH(
uint256 amountIn,
uint256 amountOutMin,
address[] calldata path,
address to,
uint256 deadline
) external returns (uint256[] memory amounts);
function swapETHForExactTokens(
uint256 amountOut,
address[] calldata path,
address to,
uint256 deadline
) external payable returns (uint256[] memory amounts);
function quote(
uint256 amountA,
uint256 reserveA,
uint256 reserveB
) external pure returns (uint256 amountB);
function getAmountOut(
uint256 amountIn,
uint256 reserveIn,
uint256 reserveOut
) external pure returns (uint256 amountOut);
function getAmountIn(
uint256 amountOut,
uint256 reserveIn,
uint256 reserveOut
) external pure returns (uint256 amountIn);
function getAmountsOut(
uint256 amountIn,
address[] calldata path
) external view returns (uint256[] memory amounts);
function getAmountsIn(
uint256 amountOut,
address[] calldata path
) external view returns (uint256[] memory amounts);
}
interface IUniswapV2Router02 is IUniswapV2Router01 {
function removeLiquidityETHSupportingFeeOnTransferTokens(
address token,
uint256 liquidity,
uint256 amountTokenMin,
uint256 amountETHMin,
address to,
uint256 deadline
) external returns (uint256 amountETH);
function removeLiquidityETHWithPermitSupportingFeeOnTransferTokens(
address token,
uint256 liquidity,
uint256 amountTokenMin,
uint256 amountETHMin,
address to,
uint256 deadline,
bool approveMax,
uint8 v,
bytes32 r,
bytes32 s
) external returns (uint256 amountETH);
function swapExactTokensForTokensSupportingFeeOnTransferTokens(
uint256 amountIn,
uint256 amountOutMin,
address[] calldata path,
address to,
uint256 deadline
) external;
function swapExactETHForTokensSupportingFeeOnTransferTokens(
uint256 amountOutMin,
address[] calldata path,
address to,
uint256 deadline
) external payable;
function swapExactTokensForETHSupportingFeeOnTransferTokens(
uint256 amountIn,
uint256 amountOutMin,
address[] calldata path,
address to,
uint256 deadline
) external;
}
contract NODEAI is Context, IERC20, Ownable {
using Address for address;
//Mapping section for better tracking.
mapping(address => uint256) private _tOwned;
mapping(address => mapping(address => uint256)) private _allowances;
mapping(address => bool) private _isExcludedFromFee;
//Loging and Event Information for better troubleshooting.
event Log(string, uint256);
event AuditLog(string, address);
event RewardLiquidityProviders(uint256 tokenAmount);
event SwapAndLiquifyEnabledUpdated(bool enabled);
event SwapAndLiquify(
uint256 tokensSwapped,
uint256 ethReceived,
uint256 tokensIntoLiqudity
);
event SwapTokensForETH(uint256 amountIn, address[] path);
//Supply Definition.
uint256 private _tTotal = 100_000_000 ether;
uint256 private _tFeeTotal;
//Token Definition.
string public constant name = "NodeAI";
string public constant symbol = "GPU";
uint8 public constant decimals = 18;
//Definition of Wallets for Marketing or team.
address payable public marketingWallet =
payable(0xD335c5E36F1B19AECE98b78e9827a9DF76eE29E6);
address payable public revenueWallet =
payable(0xE4eEc0C7e825f988aEEe7d05BE579519532E94E5);
//Dead Wallet for SAFU Contract
address public constant deadWallet =
0x000000000000000000000000000000000000dEaD;
//Taxes Definition.
uint public buyFee = 4;
uint256 public sellFee = 4;
uint public revenueFee = 1;
uint public marketingFee = 3;
uint256 public marketingTokensCollected = 0;
uint256 public totalMarketingTokensCollected = 0;
uint256 public minimumTokensBeforeSwap = 10_000 ether;
//Oracle Price Update, Manual Process.
uint256 public swapOutput = 0;
//Router and Pair Configuration.
IUniswapV2Router02 public immutable uniswapV2Router;
address public immutable uniswapV2Pair;
address private immutable WETH;
//Tracking of Automatic Swap vs Manual Swap.
bool public inSwapAndLiquify;
bool public swapAndLiquifyEnabled = true;
modifier lockTheSwap() {
inSwapAndLiquify = true;
_;
inSwapAndLiquify = false;
}
constructor() {
_tOwned[_msgSender()] = _tTotal;
address currentRouter;
//Adding Variables for all the routers for easier deployment for our customers.
if (block.chainid == 56) {
currentRouter = 0x10ED43C718714eb63d5aA57B78B54704E256024E; // PCS Router
} else if (block.chainid == 97) {
currentRouter = 0xD99D1c33F9fC3444f8101754aBC46c52416550D1; // PCS Testnet
} else if (block.chainid == 43114) {
currentRouter = 0x60aE616a2155Ee3d9A68541Ba4544862310933d4; //Avax Mainnet
} else if (block.chainid == 137) {
currentRouter = 0xa5E0829CaCEd8fFDD4De3c43696c57F7D7A678ff; //Polygon Ropsten
} else if (block.chainid == 6066) {
currentRouter = 0x4169Db906fcBFB8b12DbD20d98850Aee05B7D889; //Tres Leches Chain
} else if (block.chainid == 250) {
currentRouter = 0xF491e7B69E4244ad4002BC14e878a34207E38c29; //SpookySwap FTM
} else if (block.chainid == 42161) {
currentRouter = 0x1b02dA8Cb0d097eB8D57A175b88c7D8b47997506; //Arbitrum Sushi
} else if (
block.chainid == 1 || block.chainid == 4 || block.chainid == 5
) {
currentRouter = 0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D; //Mainnet
} else {
revert("You're not Blade");
}
//End of Router Variables.
//Create Pair in the contructor, this may fail on some blockchains and can be done in a separate line if needed.
IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(currentRouter);
WETH = _uniswapV2Router.WETH();
uniswapV2Pair = IUniswapV2Factory(_uniswapV2Router.factory())
.createPair(address(this), WETH);
uniswapV2Router = _uniswapV2Router;
_isExcludedFromFee[owner()] = true;
_isExcludedFromFee[address(this)] = true;
emit Transfer(address(0), _msgSender(), _tTotal);
}
//Readable Functions.
function totalSupply() public view override returns (uint256) {
return _tTotal;
}
function balanceOf(address account) public view override returns (uint256) {
return _tOwned[account];
}
//ERC 20 Standard Transfer Functions
function transfer(
address recipient,
uint256 amount
) public override returns (bool) {
_transfer(_msgSender(), recipient, amount);
return true;
}
//ERC 20 Standard Allowance Function
function allowance(
address _owner,
address spender
) public view override returns (uint256) {
return _allowances[_owner][spender];
}
//ERC 20 Standard Approve Function
function approve(
address spender,
uint256 amount
) public override returns (bool) {
_approve(_msgSender(), spender, amount);
return true;
}
//ERC 20 Standard Transfer From
function transferFrom(
address sender,
address recipient,
uint256 amount
) public override returns (bool) {
uint currentAllowance = _allowances[sender][_msgSender()];
require(
currentAllowance >= amount,
"ERC20: transfer amount exceeds allowance"
);
_transfer(sender, recipient, amount);
_approve(sender, _msgSender(), currentAllowance - amount);
return true;
}
//ERC 20 Standard increase Allowance
function increaseAllowance(
address spender,
uint256 addedValue
) public virtual returns (bool) {
_approve(
_msgSender(),
spender,
_allowances[_msgSender()][spender] + addedValue
);
return true;
}
//ERC 20 Standard decrease Allowance
function decreaseAllowance(
address spender,
uint256 subtractedValue
) public virtual returns (bool) {
_approve(
_msgSender(),
spender,
_allowances[_msgSender()][spender] - subtractedValue
);
return true;
}
//Approve Function
function _approve(address _owner, address spender, uint256 amount) private {
require(_owner != address(0), "ERC20: approve from the zero address");
require(spender != address(0), "ERC20: approve to the zero address");
_allowances[_owner][spender] = amount;
emit Approval(_owner, spender, amount);
}
//Transfer function, validate correct wallet structure, take fees, and other custom taxes are done during the transfer.
function _transfer(address from, address to, uint256 amount) private {
require(from != address(0), "ERC20: transfer from the zero address");
require(to != address(0), "ERC20: transfer to the zero address");
require(amount > 0, "Transfer amount must be greater than zero");
require(
_tOwned[from] >= amount,
"ERC20: transfer amount exceeds balance"
);
//Adding logic for automatic swap.
uint256 contractTokenBalance = balanceOf(address(this));
bool overMinimumTokenBalance = contractTokenBalance >=
minimumTokensBeforeSwap;
uint fee = 0;
//if any account belongs to _isExcludedFromFee account then remove the fee
if (
!inSwapAndLiquify &&
from != uniswapV2Pair &&
overMinimumTokenBalance &&
swapAndLiquifyEnabled
) {
swapAndLiquify();
}
if (to == uniswapV2Pair && !_isExcludedFromFee[from]) {
fee = (sellFee * amount) / 100;
}
if (from == uniswapV2Pair && !_isExcludedFromFee[to]) {
fee = (buyFee * amount) / 100;
}
amount -= fee;
if (fee > 0) {
_tokenTransfer(from, address(this), fee);
marketingTokensCollected += fee;
totalMarketingTokensCollected += fee;
}
_tokenTransfer(from, to, amount);
}
//Swap Tokens for BNB or to add liquidity either automatically or manual, by default this is set to manual.
//Corrected newBalance bug, it sending bnb to wallet and any remaining is on contract and can be recoverred.
function swapAndLiquify() public lockTheSwap {
uint256 totalTokens = balanceOf(address(this));
swapTokensForEth(totalTokens);
uint ethBalance = address(this).balance;
uint totalFees = revenueFee + marketingFee;
if (totalFees == 0) totalFees = 1;
uint revenueAmount = (ethBalance * revenueFee) / totalFees;
ethBalance -= revenueAmount;
transferToAddressETH(revenueWallet, revenueAmount);
transferToAddressETH(marketingWallet, ethBalance);
marketingTokensCollected = 0;
}
//swap for eth is to support the converstion of tokens to weth during swapandliquify this is a supporting function
function swapTokensForEth(uint256 tokenAmount) private {
// generate the uniswap pair path of token -> weth
address[] memory path = new address[](2);
path[0] = address(this);
path[1] = WETH;
_approve(address(this), address(uniswapV2Router), tokenAmount);
// make the swap
uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens(
tokenAmount,
0, // accept any amount of ETH
path,
address(this), // The contract
block.timestamp
);
emit SwapTokensForETH(tokenAmount, path);
}
//ERC 20 standard transfer, only added if taking fees to countup the amount of fees for better tracking and split purpose.
function _tokenTransfer(
address sender,
address recipient,
uint256 amount
) private {
_tOwned[sender] -= amount;
_tOwned[recipient] += amount;
emit Transfer(sender, recipient, amount);
}
function isExcludedFromFee(address account) external view returns (bool) {
return _isExcludedFromFee[account];
}
//exclude wallets from fees, this is needed for launch or other contracts.
function excludeFromFee(address account) external onlyOwner {
_isExcludedFromFee[account] = true;
emit AuditLog(
"We have excluded the following walled in fees:",
account
);
}
//include wallet back in fees.
function includeInFee(address account) external onlyOwner {
_isExcludedFromFee[account] = false;
emit AuditLog(
"We have including the following walled in fees:",
account
);
}
//Automatic Swap Configuration.
function setTokensToSwap(
uint256 _minimumTokensBeforeSwap
) external onlyOwner {
require(
_minimumTokensBeforeSwap >= 100 ether,
"You need to enter more than 100 tokens."
);
minimumTokensBeforeSwap = _minimumTokensBeforeSwap;
emit Log(
"We have updated minimunTokensBeforeSwap to:",
minimumTokensBeforeSwap
);
}
function setSwapAndLiquifyEnabled(bool _enabled) external onlyOwner {
require(swapAndLiquifyEnabled != _enabled, "Value already set");
swapAndLiquifyEnabled = _enabled;
emit SwapAndLiquifyEnabledUpdated(_enabled);
}
//set a new marketing wallet.
function setMarketingWallet(address _marketingWallet) external onlyOwner {
require(_marketingWallet != address(0), "setMarketingWallet: ZERO");
marketingWallet = payable(_marketingWallet);
emit AuditLog("We have Updated the MarketingWallet:", marketingWallet);
}
//set a new team wallet.
function setRevenueWallet(address _revenueWallet) external onlyOwner {
require(_revenueWallet != address(0), "setRevenueWallet: ZERO");
revenueWallet = payable(_revenueWallet);
emit AuditLog("We have Updated the RarketingWallet:", revenueWallet);
}
function transferToAddressETH(
address payable recipient,
uint256 amount
) private {
if (amount == 0) return;
(bool succ, ) = recipient.call{value: amount}("");
require(succ, "Transfer failed.");
}
//to recieve ETH from uniswapV2Router when swaping
receive() external payable {}
/////---fallback--////
//This cannot be removed as is a fallback to the swapAndLiquify
event SwapETHForTokens(uint256 amountIn, address[] path);
function swapETHForTokens(uint256 amount) private {
// generate the uniswap pair path of token -> weth
address[] memory path = new address[](2);
path[0] = WETH;
path[1] = address(this);
// make the swap
uniswapV2Router.swapExactETHForTokensSupportingFeeOnTransferTokens{
value: amount
}(
swapOutput, // accept any amount of Tokens
path,
deadWallet, // Burn address
block.timestamp + 300
);
emit SwapETHForTokens(amount, path);
}
// Withdraw ETH that's potentially stuck in the Contract
function recoverETHfromContract() external onlyOwner {
uint ethBalance = address(this).balance;
(bool succ, ) = payable(marketingWallet).call{value: ethBalance}("");
require(succ, "Transfer failed");
emit AuditLog(
"We have recover the stock eth from contract.",
marketingWallet
);
}
// Withdraw ERC20 tokens that are potentially stuck in Contract
function recoverTokensFromContract(
address _tokenAddress,
uint256 _amount
) external onlyOwner {
require(
_tokenAddress != address(this),
"Owner can't claim contract's balance of its own tokens"
);
bool succ = IERC20(_tokenAddress).transfer(marketingWallet, _amount);
require(succ, "Transfer failed");
emit Log("We have recovered tokens from contract:", _amount);
}
//Final Dev notes, this code has been tested and audited, last update to code was done to re-add swapandliquify function to the transfer as option, is recommended to be used manually instead of automatic.
}
Read Contract
allowance 0xdd62ed3e → uint256
balanceOf 0x70a08231 → uint256
buyFee 0x47062402 → uint256
deadWallet 0x85141a77 → address
decimals 0x313ce567 → uint8
inSwapAndLiquify 0x220f6696 → bool
isExcludedFromFee 0x5342acb4 → bool
marketingFee 0x6b67c4df → uint256
marketingTokensCollected 0x6ca60bc6 → uint256
marketingWallet 0x75f0a874 → address
minimumTokensBeforeSwap 0xd2d7ad83 → uint256
name 0x06fdde03 → string
owner 0x8da5cb5b → address
revenueFee 0x36e4ec64 → uint256
revenueWallet 0x44478425 → address
sellFee 0x2b14ca56 → uint256
swapAndLiquifyEnabled 0x4a74bb02 → bool
swapOutput 0x5eaa8247 → uint256
symbol 0x95d89b41 → string
totalMarketingTokensCollected 0x40763503 → uint256
totalSupply 0x18160ddd → uint256
uniswapV2Pair 0x49bd5a5e → address
uniswapV2Router 0x1694505e → address
Write Contract 16 functions
These functions modify contract state and require a wallet transaction to execute.
approve 0x095ea7b3
address spender
uint256 amount
returns: bool
decreaseAllowance 0xa457c2d7
address spender
uint256 subtractedValue
returns: bool
excludeFromFee 0x437823ec
address account
includeInFee 0xea2f0b37
address account
increaseAllowance 0x39509351
address spender
uint256 addedValue
returns: bool
recoverETHfromContract 0xce831ed5
No parameters
recoverTokensFromContract 0xe6be4a72
address _tokenAddress
uint256 _amount
renounceOwnership 0x715018a6
No parameters
setMarketingWallet 0x5d098b38
address _marketingWallet
setRevenueWallet 0xfb235f34
address _revenueWallet
setSwapAndLiquifyEnabled 0xc49b9a80
bool _enabled
setTokensToSwap 0x461d9476
uint256 _minimumTokensBeforeSwap
swapAndLiquify 0xb29ad50a
No parameters
transfer 0xa9059cbb
address recipient
uint256 amount
returns: bool
transferFrom 0x23b872dd
address sender
address recipient
uint256 amount
returns: bool
transferOwnership 0xf2fde38b
address newOwner
Token Balances (2)
View Transfers →Recent Transactions
No transactions found for this address